Để 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ế
LEFT JOINgiữ tất cả hàng First_Table- Khớp với Second_Table: ID 2,4 có dữ liệu; ID 1,3 thành NULL
WHERE Second_Table.Id IS NULLlọ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.