Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thực hiện tham gia toàn bộ bên ngoài trong MySQL

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 đơ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 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 đơ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!

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trích xuất chuỗi con MySQL sử dụng dấu phân cách

  2. Sự kiện Cronjob hoặc MySQL?

  3. Cách di chuyển Moodle độc ​​lập sang thiết lập có thể mở rộng cơ sở dữ liệu theo cụm

  4. Làm cách nào để tạo một trình tạo hàng trong MySQL?

  5. MySQL DROP INDEX