我们的软件有问题跟踪系统。昨天我的老板给了我一个任务,就是找到这个ID为2992的人提交的问题表中的所有问题:
问题表:
issue_id (int) submitter_id (int) ...other fields
然后对于该结果集中的每个问题,我必须查看另一个表以查找订阅者:
issue_subscribers表:
issue_id (int) [primary key to issue table] subscriber_id (int) ...other fields
我有这些ID号码(3247,4748,7430,8429)代表其他用户,如果其中任何一个未订阅,我不得不将它们添加为问题的订阅者。这意味着只需向issue_subscribers表添加一个新行。
这是我的头脑。我最终在Java JDBC程序中使用3个不同的查询执行此操作,而不是尝试使用纯SQL来解决它。但现在我很好奇如何做到这一点。对于专业SQL人员来说这是一个简单的程序吗?是否可以编写单个查询来执行此操作?怎么做?
答案 0 :(得分:0)
假设:
foreign key
,其中包含所有可能的subscribers
。您可以编写以下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)
);
如果您需要将其用于其他问题和订阅者,则需要将ID更改为参数,并以其他方式指定subscriber_ids
条件的in
(可能是子选项)某种)。