2017-10-30 2 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 

Ich versuche einen Weg zu finden, um festzustellen, wer nicht in x-Kurs eingeschrieben ist.Vergleichen Sie zwei Listen und geben Sie Werte zurück, die nicht in der anderen Liste enthalten sind

Also, wenn ich wissen wollte, welche Mitarbeiter nicht 1 in Kurs eingeschrieben waren das Ergebnis wäre

USER_ID 
3 
4 
5 

Dann, wenn ich wissen will, die nicht in Kurs 2

USER_ID 
4 
5 

I eingeschrieben ist versuchte dies, aber es gibt alle Studenten in den Kurs eingeschrieben. Wo, wenn der Student nicht eingeschrieben wurde, gibt es keine 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

Willkommen bei Stackoverflow eingeschrieben sind, lesen Sie bitte [How Um zu fragen] (https://stackoverflow.com/help/how-to-ask). Achten Sie besonders auf [So erstellen Sie MCVE] (https://stackoverflow.com/help/mcve). Je mehr Aufwand Sie in die Veröffentlichung einer guten Frage investieren: eine, die leicht zu lesen und zu verstehen ist und die [zum Thema] (https://stackoverflow.com/help/on-topic) ist - die Chancen stehen höher Sie werden die relevanten Leute anziehen und Sie werden schneller Hilfe bekommen. Viel Glück! – alfasin

+0

Es gibt Spalten in der Abfrage, die nicht im Datenmodell angezeigt werden, aber ansonsten gut aussieht. – Strawberry

Antwort

0

Zuerst müssen wir überprüfen, wer im Kurs eingeschrieben ist, dann müssen wir die Liste der Namen bekommen die anderen Namen mit Ausnahme der im ersten Teil der Abfrage zurückgegeben diejenigen enthalten. So etwas kann zu diesem Zweck durchgeführt werden:

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

Try this:

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

Wählt alle Benutzer, die nicht natürlich 1.

Verwandte Themen