0

我们的软件有一个问题跟踪系统。昨天我的老板给我的任务是在这个ID为2992的某个人提交的问题表中查找所有问题:

问题表:

问题ID(整数)
提交者 ID(整数)
...其他领域

然后对于该结果集中的每个问题,我必须查看另一个表以查找订阅者:

issue_subscribers 表:

issue_id (int) [发布表的主键]
订阅者 ID(整数)
...其他领域

我有这些代表其他用户的 ID 号(3247、4748、7430、8429),如果其中任何一个没有订阅,我必须将它们添加为问题的订阅者。这意味着只需向 issue_subscribers 表添加一个新行。

这超出了我的想象。我最终在 Java JDBC 程序中使用 3 个不同的查询来执行此操作,而不是尝试使用纯 SQL 来解决。但现在我很好奇它是如何做到的。对于专业的 SQL 人员来说,这是一个简单的过程吗?是否可以编写一个查询来执行此操作?怎么做?

4

1 回答 1

0

假如:

  • subscriber_id 是一个foreign key包含所有可能的表subscribers
  • 您只需对问题 2992 和订阅者 3247、4748、7430 和 8429 执行此操作。

您可以编写以下 SQL 查询:

Insert Into issue_subscribers
(
  issue_id,
  subscriber_id
  -- and other fields if necessary
)
(
  Select 2992 issue_id,
         subscriber_id
         -- and other fields if necessary
    From subscribers subs -- table that holds all possible subscribers
   Where subscriber_id In (3247, 4748, 7430, 8429)
     And Not Exists (Select 1
                       From issue_subscribers iss
                      Where issue_id = 2992
                        And iss.subscriber_id = subs.subscriber_id)

);

如果您需要将它用于其他问题和订阅者,您需要将 ids 更改为参数,并以其他方式指定subscriber_ids条件in(可能是某种子选择)。

于 2013-08-01T06:47:39.753 回答