問題

私はユーザーのテーブルと彼らがリストに持っているもののテーブルを持っています -

リストにアイテムを持つすべてのユーザーを表示するには、usersuser_listsの2つのテーブルをuser_idに結合できます。

例えば。

 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
 

  ベストアンサー

IS NULL述語でLEFT JOINを使用する:

 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);
 

  同じタグがついた質問を見る

mysqlsqljoinleft-join