Heim >Datenbank >MySQL-Tutorial >Warum unterstützt MySQL EXCEPT nicht und wie kann ich das gleiche Ergebnis erzielen?

Warum unterstützt MySQL EXCEPT nicht und wie kann ich das gleiche Ergebnis erzielen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-03 19:06:09865Durchsuche

Why Doesn't MySQL Support EXCEPT and How Can I Achieve the Same Result?

EXCEPT-Syntaxfehler in MySQL-Abfragen

MySQL-Benutzer können auf einen Syntaxfehler stoßen, wenn sie versuchen, den EXCEPT-Operator in ihren Abfragen zu verwenden. Dieser Fehler tritt häufig auf, wenn versucht wird, Zeilen aus einer Haupttabelle auszuschließen, die einer Bedingung in einer Unterabfrage entsprechen.

Betrachten Sie das folgende Beispiel:

SELECT s.sno
FROM students s
EXCEPT
SELECT t.sno
FROM take t
WHERE t.cno = 'CS112';

Diese Abfrage versucht, alle Studentenausweise abzurufen die Tabelle „Studenten“, die in der Tabelle „Take“ für den Kurs „CS112“ nicht vorhanden sind. Allerdings unterstützt MySQL die EXCEPT-Syntax nicht.

Alternative Lösungen:

Um das gewünschte Ergebnis zu erzielen, gibt es zwei alternative Ansätze:

  1. NICHT IN Unterabfrage:
SELECT s.sno
FROM students s
WHERE s.sno NOT IN
(
    SELECT t.sno
    FROM take t
    WHERE t.cno = 'CS112'
);

Dies Die Abfrage prüft explizit, ob die Studenten-IDs in der Tabelle „Studenten“ nicht in der Tabelle „Take“ für den Kurs „CS112“ vorhanden sind.

  1. LEFT JOIN mit NULL-Prüfung:
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 Studenten-IDs zwischen den Tabellen „students“ und „take“ abzugleichen. Anschließend wird mit der Funktion IFNULL überprüft, ob das Feld „cno“ in der Tabelle „take“ null ist, was darauf hinweist, dass ein Student nicht in „CS112“ eingeschrieben ist.

Beispielverwendung:

Unter Verwendung der simulierten Daten in der Frage erzeugt die LEFT JOIN mit NULL-Prüfung Folgendes Ergebnis:

SELECT s.sno
FROM temp_students s
LEFT JOIN temp_take t ON s.sno = t.sno
WHERE IFNULL(t.cno, '') != 'CS112';

Ausgabe:

5
6
7
8
9
10

Anstatt die EXCEPT-Syntax zu verwenden, können Benutzer daher die NOT IN-Unterabfrage oder LEFT JOIN mit NULL-Prüfstrategien verwenden, um Zeilen in MySQL auszuschließen Abfragen.

Das obige ist der detaillierte Inhalt vonWarum unterstützt MySQL EXCEPT nicht und wie kann ich das gleiche Ergebnis erzielen?. 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