Heim >Datenbank >MySQL-Tutorial >Wie erreicht man die EXCEPT-Funktionalität in MySQL, ohne die EXCEPT-Klausel zu verwenden?
EXCEPT-Syntaxfehler in der MySQL-Abfrage
Die Abfrage „SELECT s.sno FROM Students s EXCEPT SELECT t.sno FROM take t WHERE t .cno = 'CS112';" schlägt mit einem Syntaxfehler fehl. Dies liegt daran, dass MySQL die EXCEPT-Syntax nicht unterstützt.
Um die gewünschten Ergebnisse des Ausschlusses von Studenten zu erzielen, die den Kurs CS112 belegt haben, muss ein alternativer Ansatz verwendet werden.
NOT IN-Klausel
Eine Möglichkeit besteht darin, die NOT IN-Klausel zu verwenden:
SELECT s.sno FROM students s WHERE s.sno NOT IN ( SELECT t.sno FROM take t WHERE t.cno = 'CS112' );
Diese Abfrage wählt alle aus Studenten-SNOs, die nicht in der Unterabfrage gefunden werden, die SNOs aus der Take-Tabelle für Kurs CS112 abruft.
LEFT JOIN
Eine andere Methode ist die Verwendung eines LEFT JOIN:
SELECT s.sno FROM students s LEFT JOIN take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
Diese Abfrage verwendet einen Left-Join, um Schüler und Take-Tabellen zusammenzuführen. Die Funktion IFNULL() wird verwendet, um Nullwerte in der cno-Spalte zu verarbeiten, und die Bedingung prüft, ob der cno-Wert nicht gleich „CS112“ ist, wobei diejenigen Studenten ausgeschlossen werden, die den Kurs besucht haben.
Beispielverwendung
Im bereitgestellten Beispiel wird der LEFT JOIN-Ansatz anhand eines Modells demonstriert Datensatz:
create temporary table temp_students (sno int) insert into temp_students values (1) insert into temp_students values (2) insert into temp_students values (3) insert into temp_students values (4) insert into temp_students values (5) insert into temp_students values (6) insert into temp_students values (7) insert into temp_students values (8) insert into temp_students values (9) insert into temp_students values (10) create temporary table temp_take (sno int, cno varchar(50)) insert into temp_take values (1, 'CS112') insert into temp_take values (2, 'CS112') insert into temp_take values (3, 'CS112') insert into temp_take values (4, 'CS112') SELECT s.sno FROM temp_students s LEFT JOIN temp_take t ON s.sno = t.sno WHERE IFNULL(t.cno, '') != 'CS112'
Diese Abfrage gibt die Snos 5 bis 10 zurück, ausgenommen Studierende, die den Kurs CS112 belegt haben.
Das obige ist der detaillierte Inhalt vonWie erreicht man die EXCEPT-Funktionalität in MySQL, ohne die EXCEPT-Klausel zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!