2013-03-23 56 views
7

我有用戶的一張桌子和一個事物的表,他們有一個名單 -僅當空

顯示誰擁有在清單的項目,我可以參加兩個表usersuser_listsuser_id

所有用戶

eg

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

問題:如何顯示誰DO NOT有一個清單的項目上的所有用戶 - 說它的另一種方式,我需要的用戶列表中沒有表user_lists條目誰

我試過,但它使用LEFT JOIN不休

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

回答

11

跑了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); 
+0

真棒,非常感謝 - 有偏好嗎?比其他人缺少資源嗎? – 2013-03-23 15:56:02

+1

@DarrenSweeney - 它取決於你的數據和表中的索引設置,但有一點值得注意; 'JOIN'比'NULL'具有'NULL'值更安全,如果在另一個表'user_lists'中有'user_id'具有'NULL'值,那麼你的查詢就不會返回任何東西。 – 2013-03-23 18:18:39

+0

非常感謝 – 2013-03-23 18:24:29

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

它會給你存在於用戶,並在用戶列表中不存在的ID。

+0

MySQL不支持'EXCEPT'集合運算符。 – 2013-03-23 12:31:53