Lọc nhóm bản ghi có điều kiện bằng NOT IN trong MySQL
Khi cần nhóm dữ liệu nhưng chỉ giữ lại các nhóm thỏa mãn điều kiện nhất định (ví dụ: tất cả bản ghi trong nhóm có cùng giá trị Score), ta có thể dùng NOT IN với truy vấn con.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Name VARCHAR(40),
Score INT
);
mysql> INSERT INTO DemoTable VALUES ('Adam', 89), ('Adam', 89), ('Chris', 89), ('Chris', 89), ('Bob', 98), ('Bob', 89);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
Kết quả:
+-------+-------+ | Name | Score | +-------+-------+ | Adam | 89 | | Adam | 89 | | Chris | 89 | | Chris | 89 | | Bob | 98 | | Bob | 89 | +-------+-------+
3. Truy vấn: Lấy tên những người có TẤT CẢ bản ghi Score = 89
mysql> SELECT DISTINCT Name FROM DemoTable
WHERE Name NOT IN (
SELECT Name FROM DemoTable WHERE Score <> 89
);
4. Kết quả
+-------+ | Name | +-------+ | Adam | | Chris | +-------+
Giải thích:
- Truy vấn con tìm các tên có ít nhất 1 bản ghi Score ≠ 89 → chỉ có 'Bob'
- Truy vấn chính loại trừ 'Bob' bằng
NOT IN→ chỉ còn 'Adam' và 'Chris' (hai người này chỉ có Score = 89)
Ứng dụng: Kỹ thuật này hữu ích khi cần tìm các thực thể "hoàn toàn thỏa mãn" một điều kiện (ví dụ: khách hàng chỉ mua hàng loại A, sinh viên chỉ đạt điểm A, v.v.).