Vấn đề
Tìm giá trị Value xuất hiện **đúng 2 lần** ở 2 ID cụ thể (ID 1 và 2) trong bảng.
Ví dụ minh họa
Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value INT
);
mysql> INSERT INTO DemoTable (Value) VALUES (600), (600), (800), (800);
Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+----+-------+ | Id | Value | +----+-------+ | 1 | 600 | | 2 | 600 | | 3 | 800 | | 4 | 800 | +----+-------+
Truy vấn: Giá trị xuất hiện ở CẢ ID 1 VÀ 2
mysql> SELECT Value FROM DemoTable tbl WHERE Id IN (1,2) GROUP BY Value HAVING COUNT(DISTINCT Id) = 2;
Kết quả
+-------+ | Value | +-------+ | 600 | +-------+
Giải thích
WHERE Id IN (1,2): Chỉ xét 2 dòng ID 1 và 2.GROUP BY Value: Nhóm theo giá trị.HAVING COUNT(DISTINCT Id) = 2: Yêu cầu giá trị đó xuất hiện ở **đủ 2 ID khác nhau** (1 và 2).
Các biến thể
Tìm giá trị xuất hiện đúng N lần trong toàn bảng
SELECT Value FROM DemoTable GROUP BY Value HAVING COUNT(*) = 2;
Tìm giá trị xuất hiện ở danh sách ID cụ thể (dynamic)
SET @ids = '1,2,3'; SET @cnt = 3; PREPARE stmt FROM 'SELECT Value FROM DemoTable WHERE FIND_IN_SET(Id, ?) GROUP BY Value HAVING COUNT(DISTINCT Id) = ?'; EXECUTE stmt USING @ids, @cnt;