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

MySQL: So sánh 2 bảng và trả về ID bị thiếu (NOT IN subquery)

Để tìm ID có trong bảng A nhưng không có trong bảng B, dùng subquery với NOT IN.

Cú pháp

SELECT bang_a.id_cot 
FROM bang_a 
WHERE bang_a.id_cot NOT IN (SELECT bang_b.id_cot FROM bang_b);

Ví dụ minh họa

Bảng First_Table (ID: 1,2,3,4), bảng Second_Table (ID: 2,4).

Tạo dữ liệu

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

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

Truy vấn tìm ID thiếu

mysql> SELECT First_Table.Id 
    -> FROM First_Table 
    -> WHERE First_Table.Id NOT IN (SELECT Second_Table.Id FROM Second_Table);

Kết quả:

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

Cách thay thế (LEFT JOIN): Hiệu quả hơn với dữ liệu lớn:

SELECT a.Id 
FROM First_Table a 
LEFT JOIN Second_Table b ON a.Id = b.Id 
WHERE b.Id IS NULL;

Lưu ý: NOT IN có vấn đề nếu subquery trả về NULL. Nên dùng NOT EXISTS hoặc LEFT JOIN ... IS NULL cho an toàn.