MySQL không hỗ trợ kết nối bên ngoài đầy đủ ra khỏi hộp, không giống như các cơ sở dữ liệu khác như PostgreSQL và SQL Server. Vì vậy, bạn sẽ cần thực hiện một phép nối bên ngoài đầy đủ bằng cách sử dụng kết hợp các kiểu phép nối khác như LEFT JOIN quảng cáo RIGHT JOIN được hỗ trợ trong MySQL. Trong bài viết này, chúng ta sẽ xem xét cách tham gia toàn bộ bên ngoài vào MySQL.
Cách thực hiện tham gia toàn bộ bên ngoài trong MySQL
Dưới đây là các bước để thực hiện tham gia bên ngoài đầy đủ trong MySQL.
Hãy để chúng tôi nói rằng bạn có hai bảng sau doanh số bán hàng và đơn đặt hàng .
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 | +------+------------+--------+
Đây là cú pháp chung để thực hiện liên kết bên ngoài đầy đủ trong MySQL giữa các bảng t1 và t2 dựa trên trường THAM GIA id . Bạn có thể cập nhật tên bảng và trường tham gia theo yêu cầu của mình.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNION ALLSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.idWHERE t1.id IS NULL
Truy vấn trên cũng sẽ trả về các hàng trùng lặp, nếu có. Nếu bạn không muốn các bản ghi trùng lặp trong kết nối bên ngoài đầy đủ, hãy sử dụng truy vấn sau để thay thế.
SELECT * FROM t1LEFT JOIN t2 ON t1.id = t2.idUNIONSELECT * FROM t1RIGHT JOIN t2 ON t1.id = t2.id
Đây là truy vấn SQL để thực hiện kết hợp bên ngoài đầy đủ giữa các bảng bán hàng và đơn đặt hàng .
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 |
+------+---------------------+--------+------+------------+--------+ Đây là truy vấn SQL để thực hiện kết hợp bên ngoài đầy đủ mà không có bất kỳ hàng trùng lặp nào.
mysql> SELECT * FROM sales
LEFT JOIN orders ON sales.id = orders.id
UNION
SELECT * FROM sales
RIGHT JOIN orders ON sales.id = orders.id;
Cần một công cụ báo cáo cho MySQL? Ubiq giúp dễ dàng trực quan hóa dữ liệu trong vài phút và theo dõi trong trang tổng quan thời gian thực. Thử nó ngay hôm nay!