我有一个用户表和他们在列表中的事物表 -
要显示列表中包含项目的所有用户,我可以加入users
上的两个表user_lists
和user_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
答案 0 :(得分:11)
将LEFT JOIN
与IS 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,并且不存在于用户列表中。