Heim > Datenbank > MySQL-Tutorial > Wie kann man mehrere MySQL-Tabellen effizient abfragen, um Unstimmigkeiten beim Umgang mit NULL-Werten zu finden?

Wie kann man mehrere MySQL-Tabellen effizient abfragen, um Unstimmigkeiten beim Umgang mit NULL-Werten zu finden?

Linda Hamilton
Freigeben: 2024-12-27 02:34:09
Original
559 Leute haben es durchsucht

How to Efficiently Query Multiple MySQL Tables to Find Discrepancies While Handling NULL Values?

MySQL „NOT IN“ fragt mehrere Tabellen ab

Die angegebene MySQL-Abfrage versucht, Diskrepanzen zwischen Daten in den Noten- und Bewertungstabellen zu identifizieren, indem vorhandene Zeilen aus der Note ausgeschlossen werden in der Bewertung. Die ursprüngliche Abfrage ruft jedoch keine Ergebnisse ab, wenn der angegebene Name („JOHN“) nicht in der Auswertung gefunden wird.

Verstehen des Problems mit „NOT IN“

Das „NOT IN“ Der in der ursprünglichen Abfrage verwendete Operator ist problematisch, wenn eine der beteiligten Spalten möglicherweise NULL-Werte enthält. In MySQL stellt NULL einen unbekannten oder fehlenden Wert dar und seine Interaktion mit bestimmten Operatoren kann zu unerwarteten Ergebnissen führen.

Lösung: „NOT IN“ vermeiden

Um dieses Problem zu beheben, wird empfohlen Vermeiden Sie die Verwendung von „NOT IN“, wenn Sie mit Spalten arbeiten, die möglicherweise NULL-Werte enthalten. Erwägen Sie stattdessen die Verwendung alternativer Ansätze:

  • EXPLICIT JOINS: Anstatt die WHERE-Klausel zum Verknüpfen von Tabellen zu verwenden, geben Sie die Joins mithilfe von JOIN-Anweisungen explizit an. Dies ermöglicht präzisere und vorhersehbare Ergebnisse.
  • NOT EXISTS-UNTERABFRAGE: Überprüfen Sie mithilfe einer verschachtelten NOT EXISTS-Unterabfrage, ob in einer Tabelle Zeilen vorhanden sind, die in einer anderen Tabelle nicht vorhanden sind.

Beispiel: Verwendung von NOT EXISTS

Die folgende modifizierte Abfrage verwendet NOT EXISTS für Erzielen Sie die gewünschten Ergebnisse:

SELECT
  G.ID_Courses,
  C.ID_Courses,
  G.NAME,
  C.NAME,
  G.ID_Courses,
  E.NAME,
  E.Year,
  G.Year
FROM Grade AS G
INNER JOIN Course AS C
  ON G.ID_Courses = C.ID_Courses
LEFT JOIN Evaluation AS E
  ON G.NAME = E.NAME AND G.Year = E.Year
WHERE
  NOT EXISTS(
    SELECT
      1
    FROM Evaluation
    WHERE
      NAME = G.NAME AND Year = G.Year
  )
  AND G.NAME = 'JOHN'
  AND G.Year = 1
GROUP BY
  G.ID_Courses;
Nach dem Login kopieren

Durch die Verwendung von NOT EXISTS stellt diese Abfrage sicher, dass Zeilen aus Grade, die keine entsprechenden Zeilen in der Bewertung haben, weiterhin in der Ausgabe enthalten sind.

Das obige ist der detaillierte Inhalt vonWie kann man mehrere MySQL-Tabellen effizient abfragen, um Unstimmigkeiten beim Umgang mit NULL-Werten zu finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage