Sử dụng IN() kết hợp GROUP BY ... HAVING COUNT(DISTINCT ...) = so_luong_dieu_kien.
Cú pháp:
SELECT cot_nhom FROM ten_bang WHERE cot_dieu_kien IN (gia_tri_1, gia_tri_2, ..., gia_tri_N) GROUP BY cot_nhom HAVING COUNT(DISTINCT cot_dieu_kien) = N;
Ví dụ: Tìm FirstRow có đủ 3 giá trị SecondRow là 10, 100, 300.
CREATE TABLE DifferentRows (FirstRow INT, SecondRow INT); INSERT INTO DifferentRows VALUES (10,10), (10,100), (10,300), (20,100);
Dữ liệu:
+----------+-----------+ | FirstRow | SecondRow | +----------+-----------+ | 10 | 10 | | 10 | 100 | | 10 | 300 | | 20 | 100 | +----------+-----------+
Truy vấn: FirstRow có cả 3 giá trị 10, 100, 300 ở SecondRow:
SELECT FirstRow FROM DifferentRows WHERE SecondRow IN (10, 100, 300) GROUP BY FirstRow HAVING COUNT(DISTINCT SecondRow) = 3;
Kết quả
+----------+ | FirstRow | +----------+ | 10 | +----------+
Giải thích:
WHERE ... INlọc trước các hàng liên quan.GROUP BY FirstRowgom theo nhóm.HAVING COUNT(DISTINCT SecondRow) = 3đảm bảo nhóm đó có đủ 3 giá trị distinct yêu cầu.
Mở rộng: Pattern này gọi là "Relational Division" (chia quan hệ) - tìm nhóm chứa TẤT CẢ các giá trị yêu cầu.