2017-10-30 9 views
0
Employee List (List 1) 

USER ID NAME 
1   John 
2   Jane 
3   Rob 
4   Bill 
5   Sally 

Enrolled Students (List 1) 

ID PID  USER_ID 
1  1  1 
2  1  2 
3  2  1 
4  2  2 
5  2  3 

私はxコースに登録されていない人を検索する方法を見つけることを試みています。2つのリストと、他のリストに含まれていない戻り値を比較します。

私が知りたかったのであればコース1に登録されなかった従業員の結果は、私がコースに登録されていない人を知りたいと思った場合は2

USER_ID 
4 
5 

その後

USER_ID 
3 
4 
5 

だろうIこれを試したが、コースに登録されたすべての生徒を返す。生徒が登録されていない場合、NULL pidはありません。

SELECT e.user_id, e.full_name, es.student 
FROM employees e LEFT OUTER JOIN 
    enrolled_students es 
    ON e.user_id = es.student AND es.pid = 40 
WHERE e.level = 3 AND es.student IS NULL ; 
+0

のStackOverflowへようこそ選択し、どのように[お読みください[質問する](https://stackoverflow.com/help/how-to-ask)。 [MCVEの作成方法](https://stackoverflow.com/help/mcve)に特に注意してください。良い質問を投稿するために、より多くの努力が必要です。読みやすく、理解しやすく、トピック上にあるものです(https://stackoverflow.com/help/on-topic) - その可能性は高いです関連する人々を引きつけ、より速く助けを得るでしょう。がんばろう! – alfasin

+0

クエリ内にデータモデルには表示されない列がありますが、それ以外はわかります。 – Strawberry

答えて

0

まず我々は、我々は、クエリの最初の部分で返されるものを除き、他の名前を含む名前のリストを取得する必要があり、コースに登録ん誰がチェックする必要があります。このような何かが、この目的のために行うことができます。

SELECT 
    e1.* 
FROM 
    employee e1 
     LEFT JOIN 
    (SELECT 
     e.user_id 
    FROM 
     employee e 
    JOIN enrolled_student es ON e.user_id = es.user_id 
    WHERE 
     es.pid = 1) t ON e1.user_id = t.user_id 
WHERE 
    t.user_id IS NULL; 
0

はこれを試してみてください:

select id from users where id not in (select user_id from enrolled where pid = 1) 

がコースに在籍されていないすべてのユーザーが、1

関連する問題