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

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

问题描述:

我已经得到了以下两个SQL表(在MySQL):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 |

我想是用户在用户类别中,但如果类别标识为6,则不适用。

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

有没有办法做到这一点,没有子查询,只有在一个查询?

+2

ATLEAST一个CATEGORY_ID是否有任何理由背后*有一个办法做到这一点没有子查询,只有在一个查询?* –

+0

没有特定的原因,它只是出于概念上的原因 – Vega

您可以group by USER_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 
+2

'HAVING COUNT(case category_id = 6 then 1 END) 1' –

加入他们的行列,并检查是否有区别:

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

附:使用group by不起作用,因为它在收集数据后通过操作对DB引擎做额外的分组。

+1

我想你错过了阅读最后一行*有没有办法做到这一点,没有子查询,只有在一个查询中?* –

+0

没有子查询 – Vega

+0

@Prdp,伙计们,我是wrtiting,突然点击提交(: – num8er