gpt4 book ai didi

mysql - 查找一个表中未在链接表中多次出现的行

转载 作者:行者123 更新时间:2023-11-29 07:27:31 25 4
gpt4 key购买 nike

我有多个网站,当用户在一个网站上注册时,我们会自动在多个网站上为他们创建一个帐户。

我们管理它的“中央”数据库有一个 clients 表,一个 sites 表,然后是一个 clients_sites 表作为链接。

clients table
-------------
id | name
1 | Larry
2 | Curly

sites table
-----------
id | url
1 | http://one.com
2 | http://two.com

clients_sites
--------------
id | clients_id | sites_id
1 | 1 | 1
2 | 1 | 2
3 | 2 | 1

我需要找到一个有效的查询来查找未在每个站点的链接表中列出的客户。

因此在此示例中,Curly 未列在站点二中。

是否有单个 SQL 查询来查找未出现在每个站点的链接表中的客户?

最佳答案

  • 我们可以考虑 clients_idsites_id 的所有可能组合,在 Derived Table 中使用 Cross Join
  • 现在,我们可以使用“反连接”来仅考虑那些在 clients_sites 表中找不到匹配行的“组合”,使用 Left Joinclients_sites.id IS NULL(没有匹配的行)

尝试以下查询:

SELECT dt.* 
FROM
(SELECT c.id AS clients_id,
c.name AS clients_name,
s.id AS sites_id,
s.url AS sites_url
FROM clients AS c
CROSS JOIN sites AS s
) AS dt
LEFT JOIN clients_sites AS cs
ON cs.clients_id = dt.clients_id AND
cs.sites_id = dt.sites_id
WHERE cs.id IS NULL

关于mysql - 查找一个表中未在链接表中多次出现的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53115742/

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