Heim >Datenbank >MySQL-Tutorial >Wie erreicht man die EXCEPT-Funktionalität in MySQL, ohne die EXCEPT-Klausel zu verwenden?

Wie erreicht man die EXCEPT-Funktionalität in MySQL, ohne die EXCEPT-Klausel zu verwenden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-31 13:26:14201Durchsuche

How to Achieve EXCEPT Functionality in MySQL Without Using the EXCEPT Clause?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn