Tags: MySQL

MySQL: Jak mogę zrobić FULL OUTER JOIN w MySQL?

Zrozumienie FULL OUTER JOIN w MySQL

W MySQL, operacja `FULL OUTER JOIN` nie jest bezpośrednio obsługiwana, ale można ją symulować. `FULL OUTER JOIN` łączy dwa zestawy wyników - jeden z `LEFT JOIN` i jeden z `RIGHT JOIN` - i zwraca wszystkie wiersze z obu tabel, wypełniając brakujące wartości NULL, gdy nie ma dopasowania.

Symulowanie FULL OUTER JOIN za pomocą UNION

Aby osiągnąć efekt `FULL OUTER JOIN` w MySQL, możemy użyć kombinacji `LEFT JOIN` i `RIGHT JOIN` wraz z operatorem `UNION`. Poniżej przedstawiam przykład:

Załóżmy, że mamy dwie tabele, `Tabela1` i `Tabela2`, każda z kolumną `id`.


-- Tabela1
+----+-------+
| id | dane1 |
+----+-------+
-- Tabela2
+----+-------+
| id | dane2 |
+----+-------+

Aby zasymulować `FULL OUTER JOIN` pomiędzy `Tabela1` i `Tabela2` na kolumnie `id`, można użyć następującego zapytania:


SELECT 
    Tabela1.id, 
    Tabela1.dane1, 
    Tabela2.dane2 
FROM 
    Tabela1 
LEFT JOIN 
    Tabela2 ON Tabela1.id = Tabela2.id
UNION
SELECT 
    Tabela2.id, 
    Tabela1.dane1, 
    Tabela2.dane2 
FROM 
    Tabela1 
RIGHT JOIN 
    Tabela2 ON Tabela1.id = Tabela2.id;

W tym zapytaniu, pierwsza część (przed `UNION`) zwraca wszystkie wiersze z `Tabela1` i odpowiadające im wiersze z `Tabela2`. Druga część (po `UNION`) robi to samo, ale zaczyna od `Tabela2` i dołącza odpowiadające wiersze z `Tabela1`. `UNION` usuwa duplikaty, pozostawiając pełny zbiór unikalnych wierszy z obu tabel.

Ważne Uwagi

  • `UNION` domyślnie usuwa duplikaty. Jeśli chcesz zachować wszystkie duplikaty, użyj `UNION ALL`.
  • Upewnij się, że oba zapytania w `UNION` mają tę samą liczbę kolumn w tej samej kolejności i zgodne typy danych.
  • Pamiętaj, że `FULL OUTER JOIN` może być kosztowny pod względem wydajności, zwłaszcza dla dużych tabel.