Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

So sánh 2 bảng trả về ID thiếu dùng LEFT OUTER JOIN MySQL

Để tìm các ID có trong bảng A nhưng thiếu trong bảng B, sử dụng LEFT OUTER JOIN kết hợp WHERE bang_b.cot IS NULL.

Cú pháp

SELECT bang_a.id 
FROM bang_a 
LEFT OUTER JOIN bang_b ON bang_a.id = bang_b.id 
WHERE bang_b.id IS NULL;

Ví dụ minh họa

Tạo bảng 1 (First_Table):

mysql> CREATE TABLE First_Table (Id INT);
mysql> INSERT INTO First_Table VALUES(1), (2), (3), (4);

Tạo bảng 2 (Second_Table):

mysql> CREATE TABLE Second_Table (Id INT);
mysql> INSERT INTO Second_Table VALUES(2), (4);

Dữ liệu:

First_Table:  1, 2, 3, 4
Second_Table: 2, 4

Tìm ID chỉ có trong First_Table:

mysql> SELECT First_Table.Id 
    -> FROM First_Table 
    -> LEFT OUTER JOIN Second_Table ON First_Table.Id = Second_Table.Id 
    -> WHERE Second_Table.Id IS NULL;

Kết quả:

+------+
| Id   |
+------+
| 1    |
| 3    |
+------+

Giải thích cơ chế

  1. LEFT JOIN giữ tất cả hàng First_Table
  2. Khớp với Second_Table: ID 2,4 có dữ liệu; ID 1,3 thành NULL
  3. WHERE Second_Table.Id IS NULL lọc ra ID không khớp

Các phương pháp khác

-- NOT IN (cẩn thận với NULL)
SELECT Id FROM First_Table WHERE Id NOT IN (SELECT Id FROM Second_Table);

-- NOT EXISTS (khuyên dùng, an toàn với NULL)
SELECT Id FROM First_Table f WHERE NOT EXISTS (SELECT 1 FROM Second_Table s WHERE s.Id = f.Id);

-- EXCEPT (MySQL 8.0+)
SELECT Id FROM First_Table EXCEPT SELECT Id FROM Second_Table;

Khuyên dùng NOT EXISTS vì an toàn với NULL và tối ưu tốt hơn NOT IN.