仅在空时选择

时间:2013-03-23 10:56:57

标签: mysql sql join left-join

我有一个用户表和他们在列表中的事物表 -

要显示列表中包含项目的所有用户,我可以加入users上的两个表user_listsuser_id

e.g。

select u.emailaddr, u.name from users u
join user_lists uw where u.user_id=uw.user_id
group by u.name

问题:如何向所有不要列表中的项目的用户显示 - 换句话说,我需要一个没有用户的列表表user_lists中的条目

我尝试了这个,但它无休止地运行

select u.emailaddr, u.name from users u
join user_lists uw where u.user_id<>uw.user_id
group by u.name

2 个答案:

答案 0 :(得分:11)

LEFT JOINIS NULL谓词:

一起使用
select u.emailaddr, u.name 
from users u
LEFT join user_lists uw ON u.user_id = uw.user_id
WHERE uw.user_id IS NULL;

或: NOT IN谓词:

select u.emailaddr, u.name 
from users u
WHERE u.user_id NOT IN (SELECT user_id
                        FROM user_lists);

答案 1 :(得分:0)

SELECT u.user_id FROM users u
EXCEPT
SELECT uw.user_id FROM user_lists uw

它将为您提供用户中存在的ID,并且不存在于用户列表中。