Miten MySQL:ssa tehdään molempipuolinen liitos?
Taulu A (id, arvo)
1 A
2 B
3 C
Taulu B (id, arvo)
2 X
3 Y
4 Z
Lopputulos (id, A, B)
1 A, NULL
2 B, X
3 C,Y
4 NULL, Z
Taulu A (id, arvo)
1 A
2 B
3 C
Taulu B (id, arvo)
2 X
3 Y
4 Z
Lopputulos (id, A, B)
1 A, NULL
2 B, X
3 C,Y
4 NULL, Z
Vastaukset 2
Vanhimmat
select * from Taulu A full join Taulu B
using id
Oikea vastaus on, ettei sitä tänä päivänä tehdä mitenkään, siis suoraan. Kiertotie toki on olemassa, ja se on seuraava:
SELECT a.id, a.arvo, b.arvo
FROM a_taulu a LEFT JOIN b_taulu b ON a.id = b.id
UNION
SELECT b.id, a.arvo, b.arvo
FROM a_taulu a RIGHT JOIN b_taulu b ON a.id = b.id;
Ensimmäinen SELECT siis hakee a_taulu:sta kaikki rivit ja yhdistää kunkin rivin mahdolliseen b_taulu:ssa olevaan riviin id:n perusteella.
Toinen SELECT hakee b_taulu:sta kaikki rivit ja yhdistää kunkin rivin mahdolliseen a_taulu:ssa olevaan riviin.
Nämä kaksi kyselytulosta yhdistetään UNIONilla ja kaksoiskappaleet poistuvat, koska tässä ei ole määritystä UNION ALL.
Lisää aiheesta:
http://dev.mysql.com/doc/refman/5.0/en/join.html
Tuossa ylläolevassa paikassa kaksi viimeistä viestiä liittyvät aiheeseen.
Tässä alla taas on juttua, kuinka full join on Oracle-tietokannassa olemassa versiosta 9i alkaen. MySQL:ssä sitä ei ole vielä lainkaan. Mutta tietokannat kehittyvät, ja kiertotie kuitenkin löytyy.
http://www.oreillynet.com/pub/a/network/2002/04/23/fulljoin.html