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

Truy vấn MySQL chọn bản ghi có 2 giá trị chính xác trùng khớp


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;