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 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
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 t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT 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!