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 traCOUNT(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.