Heim  >  Artikel  >  Datenbank  >  Wie kann ich einen FULL JOIN in MySQL mit LEFT- und RIGHT-JOINs emulieren?

Wie kann ich einen FULL JOIN in MySQL mit LEFT- und RIGHT-JOINs emulieren?

Barbara Streisand
Barbara StreisandOriginal
2024-11-16 08:38:02235Durchsuche

How Can I Emulate a FULL JOIN in MySQL Using LEFT and RIGHT JOINs?

Emulieren von MySQL FULL JOIN mit LEFT- und RIGHT JOINS

MySQL unterstützt FULL JOIN-Vorgänge nicht nativ. Es ist jedoch möglich, mit einer Kombination aus LEFT JOIN und RIGHT JOIN ähnliche Ergebnisse zu erzielen.

Das Problem verstehen

Das Ziel besteht darin, eine Ergebnismenge zurückzugeben, die enthält alle Datensätze aus beiden Tabellen, Personen und Bestellungen, auch wenn die übereinstimmenden Felder (P_Id) in einer der beiden Tabellen null sind.

Lösung

Um einen FULL JOIN zu simulieren, verwenden Sie die folgende Abfrage:

SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
LEFT JOIN
        Orders o
ON      p.P_Id = o.P_Id
UNION ALL
SELECT  p.LastName, p.FirstName, o.OrderNo
FROM    Persons p
RIGHT JOIN
        Orders o
ON      p.P_Id = o.P_Id
WHERE   p.P_Id IS NULL
ORDER BY
        p.LastName;

Erläuterung

  • Der LEFT JOIN gibt alle Zeilen aus der Personentabelle zurück, einschließlich derjenigen mit übereinstimmenden P_Id-Werten in der Orders-Tabelle und diejenigen ohne.
  • Die UNION ALL-Operation kombiniert die Ergebnisse des LEFT JOIN mit den Ergebnissen des RIGHT JOIN, der alle Zeilen aus der Orders-Tabelle zurückgibt, einschließlich derjenigen mit übereinstimmenden P_Id-Werten in der Persons-Tabelle und denen ohne.
  • Die WHERE-Klausel filtert alle Zeilen aus der Persons-Tabelle heraus, die eine Null-P_Id haben, und stellt so sicher, dass alle Zeilen aus dem LEFT JOIN enthalten sind.
  • Die ORDER BY-Klausel sortiert die Ergebnisse nach die Spalte Nachname.

Diese Abfrage erzeugt einen Ergebnissatz, der mit dem in der Problemstellung beschriebenen identisch ist:

LastName FirstName OrderNo
Hansen Ola 22456
Hansen Ola 24562
Pettersen Kari 77895
Pettersen Kari 44678
Svendsen Tove 34764

Das obige ist der detaillierte Inhalt vonWie kann ich einen FULL JOIN in MySQL mit LEFT- und RIGHT-JOINs emulieren?. 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