Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wykonać pełne złącze zewnętrzne w MySQL?

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ś!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak konwertować wielkie litery na małe litery w MySQL

  2. Jak mogę opóźnić kolumny w MySQL?

  3. Wstawianie zbiorcze z SQLAlchemy ORM

  4. EEE MMM dd GG:mm:ss ZZZ rrrr format daty do java.sql.Date

  5. Używanie ScrollableResults Hibernate do powolnego odczytu 90 milionów rekordów