2016-05-11 21 views
0

Ich habe eine Tabelle comments, die ein Feld students Tabelle student_id (Fremdschlüssel enthält. ich einen anderen Tisch zu tun haben studentsWie wählt man 'Ausnahmen' in SQL?

Was ich möchte, ist eine Abfrage, die alle Schüler zeigt, die keine Kommentare gemacht haben . Die SQL ich habe, zeigt nur Studenten, die Kommentare

SELECT studentID, email, first_name, last_name FROM "students" JOIN comments ON students.id = comments.student_id 

Wie kann ich ‚Reverse‘ diese SQL-Studenten zu zeigen, wer kommentiert gemacht haben, nicht?

+0

Alle drei Antworten unten arbeiten perfekt, ich habe einfach nicht Mrunal und Gordon Linoff Methoden mit dem 's' gesehen, so werde ich akzeptieren PhillipXT Antwort rein, weil dies der einzige Stil von SQL ist, den ich gesehen habe (Anmerkung, ich bin brandneu in SQL, fing erst gestern an zu lernen, also verzeih mir bitte meinen Mangel an Wissen) – oneman

+0

Das "s" ist nur ein Alias ​​für den Tabellennamen. Es kann eine Abkürzung für einen langen Tabellennamen sein, und es kann auch in Unterabfragen verwendet werden, wie Gordon Linoff es getan hat, um auf die Tabellen in der Elternabfrage zurückzukommen. – PhillipXT

Antwort

1

Sie können dies tun:

SELECT studentID, email, first_name, last_name 
FROM students 
LEFT JOIN comments ON students.id = comments.student_id 
WHERE comments.student_id IS NULL 
4

Ein Verfahren verwendet not exists:

select s.* 
from students s 
where not exists (select 1 
        from comments c 
        where s.id = c.student_id 
       ); 
1
select s.studentID, s.email, s.first_name, s.last_name from students s where s.id not in (select student_id from comments); 
Verwandte Themen