[英]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.