MySQL - Joins - Full Outer Join
1. Erklärung
Bei einem Full Outer Join handelt es sich um eine Kombination aus einem Left und einem Right Join. Das Ziel dabei ist, Datensätze zu
verknüpfen. Wenn es aber keine Beziehung gibt, so sollen die entsprechenden Felder beider Tabellen mit einem
NULL
gefüllt werden.
Dazu schauen wir uns mal die folgende Tabelle an. Achtet mal auf mögliche Verbindungen, dann fällt euch auf, dass wir zwei Hersteller ohne Produkt und ein Produkt ohne Hersteller haben.
Tabelle 'hersteller' Tabelle 'produkt'
+----+--------------+ +----+--------------+--------+
| id | zulieferer | | id | produkt |hs_link |
+----+--------------+ +----+--------------+--------+
| 1 | Hilti | | 1 | Schlagbohrer | 1 |
| 2 | Hoch & Tief | | 2 | Zement | 2 |
| 3 | Eisen-Karl | | 3 | Kneifzange | 3 |
| 4 | Stahl AG | | 4 | Brecheisen | 3 |
| 5 | Gähn & Söhne | | 5 | Hammer | 7 |
+----+--------------+ +----+--------------+--------+
2. Die Abfrage
Leider unterstützt MySQL kein FULL OUTER JOIN
, daher muss man hier ein wenig tricksen, indem man per UNION
das
Ergebnis zweier Abfragen miteinander verknüpft.
SELECT
h.zulieferer,
p.produkt
FROM
hersteller h
LEFT JOIN
produkt p ON (h.id = p.hs_link)
UNION
SELECT
h.zulieferer,
p.produkt
FROM
hersteller h
RIGHT JOIN
produkt p ON (h.id = p.hs_link);
Erläuterung
Zunächst nutzen wir den Left-Query aus dem vorherigen Abschnitt (SELECT ... FROM ...LEFT JOIN ...
). Damit holen wir uns
alle Hersteller und, falls vorhanden, deren Produkt. Wenn es Letzteres nicht gibt, so wird die Spalte produkt
mit
NULL
aufgefüllt.
Anschließend verbinden wir die erste Abfrage per UNION
mit der zweiten. Dort drehen wir den Spieß einfach um und holen
uns auch noch die Produkte, zu denen es keinen Hersteller gibt.
3. Das Ergebnis
... sieht dann so aus. Ich hoffe, ihr habt das Prinzip verstanden.
+--------------+--------------+
| zulieferer | produkt |
+--------------+--------------+
| Hilti | Schlagbohrer |
| Hoch & Tief | Zement |
| Eisen-Karl | Kneifzange |
| Eisen-Karl | Brecheisen |
| Stahl AG | NULL |
| Gähn & Söhne | NULL |
| NULL | Hammer |
+--------------+--------------+
4. Fazit
Da das Thema Joins doch ziemlich komplex ist, habe ich dazu ein Tutorial verfasst, das euch mit den grundsätzlichen Dingen vertraut macht. Und wenn man das Prinzip verstanden hat, so kommt der Rest (fast) von allein.