gpt4 book ai didi

mysql - 如何编写带有连接、集合减法、子查询的 SQL 语句

转载 作者:行者123 更新时间:2023-11-30 01:25:57 26 4
gpt4 key购买 nike

我们的软件有一个问题跟踪系统。昨天老板给我的任务是找出这个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),如果其中任何一个没有订阅,我必须将它们添加为该问题的订阅者。这意味着只需向 issues_subscribers 表添加一个新行即可。

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

最佳答案

假设:

  • subscriber_id 是某个表的外键,该表包含所有可能的订阅者
  • 您只需对问题 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)

);

如果您需要将其用于其他问题和订阅者,您需要将 id 更改为参数,并指定 in 条件的 subscriber_ids 等其他内容方式(也许是某种子选择)。

关于mysql - 如何编写带有连接、集合减法、子查询的 SQL 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17986405/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com