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

uqjltbpv  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(308)

我有多个网站,当一个用户在一个网站注册时,我们会自动在几个网站上为他们创建一个帐户。
我们管理这个的“中央”数据库有一个clients表、一个sites表和一个clients\u 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没有列在site2中。
是否有一个sql查询来查找每个站点的链接表中没有出现的客户端?

iq3niunx

iq3niunx1#

我们可以考虑 clients_idsites_id ,使用 Cross Join 在派生表中。
现在,我们可以使用“反连接”来只考虑那些在表中找不到匹配行的“组合” clients_sites 表,使用 Left Join 以及 clients_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

相关问题