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

Kiểm tra nhiều hàng tồn tại trong MySQL với COUNT DISTINCT IN

Kiểm tra sự tồn tại của nhiều ID cùng lúc trong MySQL

Sử dụng COUNT(DISTINCT id) = N kết hợp WHERE id IN (...) để kiểm tra xem N ID cụ thể có TẤT CẢ đều tồn tại trong bảng hay không.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable1219 (Id INT, Name VARCHAR(40));
mysql> INSERT INTO DemoTable1219 VALUES
    (100, 'Adam'), (101, 'John'), (102, 'Chris'), (103, 'Bob');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable1219;
+------+-------+
| Id   | Name  |
+------+-------+
| 100  | Adam  |
| 101  | John  |
| 102  | Chris |
| 103  | Bob   |
+------+-------+

3. Truy vấn: Kiểm tra 3 ID (100, 103, 102) CỨNG tồn tại

mysql> SELECT COUNT(DISTINCT Id) = 3
    FROM DemoTable1219
    WHERE Id IN (100, 103, 102);

4. Kết quả

+----------------------+
| COUNT(DISTINCT Id)=3 |
+----------------------+
| 1                    |
+----------------------+

Giải thích:

  • WHERE Id IN (100, 103, 102): Lọc 3 ID cần kiểm tra
  • COUNT(DISTINCT Id): Đếm số ID khác nhau thực sự có trong bảng (trong 3 ID đó)
  • = 3: So sánh với số lượng mong đợi (3)
  • Kết quả 1 (TRUE) = 3 ID đều tồn tại. Kết quả 0 (FALSE) = thiếu ít nhất 1 ID

Các biến thể:

  • Kiểm tra ít nhất 1 tồn tại: SELECT COUNT(*) > 0 FROM table WHERE id IN (...)
  • Tìm ID thiếu: SELECT id FROM (SELECT 100 AS id UNION SELECT 103 UNION SELECT 102) t LEFT JOIN DemoTable1219 d ON t.id = d.Id WHERE d.Id IS NULL
  • EXISTS cho từng ID: SELECT id, EXISTS(SELECT 1 FROM DemoTable1219 WHERE Id = t.id) FROM (SELECT 100 AS id UNION SELECT 103 UNION SELECT 102) t

Ứng dụng: Validate foreign keys batch, kiểm tra tính toàn vẹn dữ liệu, kiểm tra permission nhiều role cùng lúc.