MySQL nie obsługuje pełnego łączenia zewnętrznego od razu po wyjęciu z pudełka, w przeciwieństwie do innych baz danych, takich jak PostgreSQL i SQL Server. Będziesz więc musiał wykonać pełne złącze zewnętrzne, używając kombinacji innych typów złączenia, takich jak LEFT JOIN i RIGHT JOIN, które są obsługiwane w MySQL. W tym artykule przyjrzymy się, jak wykonać pełne złącze zewnętrzne w MySQL.
Jak wykonać pełne złącze zewnętrzne w MySQL
Oto kroki, aby wykonać pełne złącze zewnętrzne w MySQL.
Załóżmy, że masz następujące dwie tabele sprzedaż i zamówienia .
mysql> select * from sales; +------+---------------------+--------+ | id | order_date | amount | +------+---------------------+--------+ | 1 | 2021-02-02 08:15:00 | 250 | | 2 | 2021-02-02 08:30:00 | 200 | | 3 | 2021-02-02 08:55:00 | 150 | | 4 | 2021-02-02 09:15:00 | 125 | | 5 | 2021-02-02 09:30:00 | 250 | | 6 | 2021-02-02 09:45:00 | 200 | | 7 | 2021-02-02 10:15:00 | 180 | | 8 | 2021-02-02 10:30:00 | 125 | | 9 | 2021-02-02 10:45:00 | 200 | | 10 | 2021-02-02 11:15:00 | 250 | | 11 | 2021-02-02 11:30:00 | 150 | | 12 | 2021-02-02 11:45:00 | 200 | +------+---------------------+--------+ mysql> select * from orders; +------+------------+--------+ | id | order_date | amount | +------+------------+--------+ | 5 | 2021-01-28 | 250 | | 6 | 2021-01-29 | 250 | | 7 | 2021-01-30 | 250 | | 8 | 2021-01-31 | 250 | | 9 | 2021-02-01 | 250 | +------+------------+--------+
Oto ogólna składnia wykonywania pełnego zewnętrznego sprzężenia w MySQL między tabelami t1 i t2 na podstawie pola JOIN id . Możesz zaktualizować nazwy tabel i pole dołączenia zgodnie ze swoimi wymaganiami.
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION ALL
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
WHERE t1.id IS NULL
Powyższe zapytanie zwróci również zduplikowane wiersze, jeśli takie istnieją. Jeśli nie chcesz zduplikowanych rekordów w pełnym sprzężeniu zewnętrznym, użyj zamiast tego następującego zapytania.
SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
Oto zapytanie SQL do wykonania pełnego zewnętrznego sprzężenia między tabelami sprzedaż i zamówienia .
mysql> SELECT * FROM sales LEFT JOIN orders ON sales.id = orders.id UNION ALL SELECT * FROM sales RIGHT JOIN orders ON sales.id = orders.id WHERE sales.id IS NULL ; +------+---------------------+--------+------+------------+--------+ | id | order_date | amount | id | order_date | amount | +------+---------------------+--------+------+------------+--------+ | 5 | 2021-02-02 09:30:00 | 250 | 5 | 2021-01-28 | 250 | | 6 | 2021-02-02 09:45:00 | 200 | 6 | 2021-01-29 | 250 | | 7 | 2021-02-02 10:15:00 | 180 | 7 | 2021-01-30 | 250 | | 8 | 2021-02-02 10:30:00 | 125 | 8 | 2021-01-31 | 250 | | 9 | 2021-02-02 10:45:00 | 200 | 9 | 2021-02-01 | 250 | | 1 | 2021-02-02 08:15:00 | 250 | NULL | NULL | NULL | | 2 | 2021-02-02 08:30:00 | 200 | NULL | NULL | NULL | | 3 | 2021-02-02 08:55:00 | 150 | NULL | NULL | NULL | | 4 | 2021-02-02 09:15:00 | 125 | NULL | NULL | NULL | | 10 | 2021-02-02 11:15:00 | 250 | NULL | NULL | NULL | | 11 | 2021-02-02 11:30:00 | 150 | NULL | NULL | NULL | | 12 | 2021-02-02 11:45:00 | 200 | NULL | NULL | NULL | +------+---------------------+--------+------+------------+--------+
Oto zapytanie SQL, aby wykonać pełne sprzężenie zewnętrzne bez żadnych zduplikowanych wierszy w wyniku.
mysql> SELECT * FROM sales LEFT JOIN orders ON sales.id = orders.id UNION SELECT * FROM sales RIGHT JOIN orders ON sales.id = orders.id;
Potrzebujesz narzędzia do raportowania dla MySQL? Ubiq ułatwia wizualizację danych w ciągu kilku minut i monitorowanie w pulpitach nawigacyjnych w czasie rzeczywistym. Wypróbuj już dziś!