Hauptmenü

Untermenü

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 |
+----+--------------+   +----+--------------+--------+
|  
Hilti        |   |  Schlagbohrer |      |
|  
Hoch Tief  |   |  Zement       |      |
|  
Eisen-Karl   |   |  Kneifzange   |      |
|  
Stahl AG     |   |  Brecheisen   |      
|  
Gähn Söhne |   |  Hammer       |      |
+----+--------------+   +----+--------------+--------+

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.

zurück zum vorherigen Abschnitt