【问题标题】:Procedure that for looks for an id in different table and inserts it if there is no entry for that idfor 在不同的表中查找 id 并在没有该 id 的条目时插入它的过程
【发布时间】:2014-03-01 18:01:29
【问题描述】:

我需要在 mysql 中编写一个每晚运行并执行以下操作的程序:-

对于“关联”表中的每个“ID”,查找“状态表”中是否存在特定“部门”的条目。如果有条目,则转到下一个“id”,否则在状态表中为该 id 插入一行。

关联表

Assoc_Id

Assoc_Project

Assoc_Assigned_On

状态表

子_id

Assoc_Id

子_on

部门

我只是不知道如何做到这一点。任何帮助将不胜感激。

提前致谢

【问题讨论】:

  • 能否请您至少提供相关的表结构?
  • “转到下一个 ID。”恕我直言,当你试图弄清楚如何用声明性语言做某事时,你是在程序上思考。不要考虑“for-each”,考虑值集,您会更轻松地使用 SQL。

标签: php mysql procedure routines


【解决方案1】:

由于您没有提供完整的架构,我不确定表上的主键/外键,但这里有一个查询可以帮助您:

INSERT INTO tbl_status (Assoc_Id, Sub_on, Department)
SELECT a.Assoc_Id, [Your Sub_on Value], 'IT'
FROM tbl_associate a
    LEFT JOIN tbl_status s ON a.Assoc_Id = s.Assoc_Id AND s.Department = 'IT'
WHERE s.Sub_Id IS NULL;

这里的基本思想是在associate 表中的status 表上LEFT JOIN,其中Assoc_Id 相等,部门值就是您要搜索的值。 WHERE 子句过滤结果,以便它根据连接条件仅显示当前不在status 表中的记录。我选择了Sub_Id,因为我认为这是主键。您在此处选择什么并不重要,只是该值必须是 status 表顺序中的非空字段才能使此查询起作用。

【讨论】:

  • 这里是关于主键和外键的详细信息。 Associate Table Assoc_Id (Primary Key) Assoc_Project Assoc_Assigned_On Status Table Sub_id (Primary Key) Assoc_Id (Foreign Key) Sub_on Department 我想要我的程序做的是从每个 AssociateId仅当特定部门(例如 IT)的 AssociateId 没有没有条目时,关联表并在 tbl_status 中插入一行。示例:如果有 2 个同事 ABC1 和 ABC2。 ABC1 在 tbl_stat 中有一个部门 IT 条目。那么我想要的是,应该在 tbl_stat 中为 ABC2 插入一行。
  • 好的,我稍微编辑了我的答案,所以这个查询适用于部门IT。您需要指定的唯一另一件事是SELECT 语句中Sub_on 的值,因为我不确定它是什么类型的字段。否则,此查询应该正是您要查找的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多