FULL OUTER JOIN in MySQL?
V MySQL pogrešam malo morje možnosti. FULL OUTER JOIN
je ena od njih, ampak se ga da z malo motoviljenja vseeno izvesti.
Najprej, kaj sploh je OUTER JOIN
. OUTER JOIN
ne zahteva, da so v združenih tabelah vsi ujemajoči se zapisi, namesto tega manjkajoči zapis nadomesti z vrednostmi NULL
. Verjetno ste se vsi že srečali z LEFT OUTER JOIN
, v MySQL ga lahko uporabimo kar s skrajšanim LEFT JOIN
. Nekateri ste mogoče uporabili tudi že RIGHT OUTER JOIN
, ravno tako lahko skrajšan na RIGHT JOIN
je na voljo v MySQL.
Primer LEFT OUTER JOIN
, če združimo tabeli a
in b
, v obeh imamo samo polje id
, v vsaki po dva zapisa, v tabeli a
zapisa 1
in 2
, v tabeli b
pa zapisa 1
in 3
:
+----+----+
|a.id|b.id|
+----+----+
| 1| 1|
| 2|NULL|
+----+----+
Primer RIGHT OUTER JOIN na istih tabelah:
+----+----+
|a.id|b.id|
+----+----+
| 1| 1|
|NULL| 3|
+----+----+
Kaj pa bi naredil FULL OUTER JOIN, če bi ga MySQL seveda omogočal?
+----+----+
|a.id|b.id|
+----+----+
| 1| 1|
| 2|NULL|
|NULL| 3|
+----+----+
Uporabna zadeva, vendar žal v MySQL neizvedljiva. Ali pač?
Ker pač ne obupam tako hitro, sem seveda našel rešitev, bolje rečeno workaround. Z uporabo UNION. Poglejmo:
+----+----+
|a.id|b.id|
+----+----+
| 1| 1|
| 2|NULL|
|NULL| 3|
+----+----+
Jupi! Pa ga imamo, ne izgleda preveč lepo, deluje pa vseeno :)