繁体   English   中英

MYSQL-从一个表中查找另一个表中不存在的记录

[英]MYSQL - Find records from one table which don't exist in another

我有以下两个SQL表(在MySQL中):

Users | id | name | |----|------| | 1 | Luke | | 2 | Mark | | 3 | Lucy | | 4 | Biff |

User category | user_id | category_id | |---------|-------------| | 1 | 5 | | 1 | 6 | | 2 | 5 | | 2 | 7 | | 3 | 5 |

我希望属于“用户”类别的用户,但如果类别ID为6,则不需要。

在这种情况下,马克和露西因为卢克(Luke)也在类别6中,而比夫(Biff)没有类别。

有一种方法可以不使用子查询而仅在一个查询中执行此操作?

您可以group by user_id group by并消除那些category_id至少为6的行。

select uc.user_id,u.name
from user_category uc
join users u on uc.user_id = u.id
group by uc.user_id,u.name
having sum(case when category_id = 6 then 1 else 0 end) = 0

加入他们并检查差异:

SELECT * FROM users 
INNER JOIN user_category ON (user_category.user_id = users.id) 
WHERE user_category.category_id <> 6

ps使用group by无效,因为它对数据库引擎说在收集数据后进行其他分组操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM