ภาพรวม
ใช้ COUNT(DISTINCT column) = N ร่วมกับ IN() เพื่อตรวจสอบว่ามีแถวที่ตรงเงื่อนไขครบ N ค่าที่ระบุหรือไม่
ตัวอย่างสมบูรณ์
1. สร้างตารางและข้อมูล
CREATE TABLE DemoTable1219 (
Id INT,
Name VARCHAR(40)
);
INSERT INTO DemoTable1219 VALUES (100, 'Adam');
INSERT INTO DemoTable1219 VALUES (101, 'John');
INSERT INTO DemoTable1219 VALUES (102, 'Chris');
INSERT INTO DemoTable1219 VALUES (103, 'Bob');
2. ตรวจสอบว่ามี Id 100, 103, 102 ครบ 3 ค่า หรือไม่
SELECT COUNT(DISTINCT Id) = 3
FROM DemoTable1219
WHERE Id IN (100, 103, 102);
3. ผลลัพธ์
+----------------------+
| COUNT(DISTINCT Id)=3 |
+----------------------+
| 1 | -- 1 = TRUE (มีครบ 3 ค่า)
+----------------------+
การทำงาน
WHERE Id IN (100, 103, 102)- กรองเฉพาะแถวที่ Id อยู่ในชุดนี้COUNT(DISTINCT Id)- นับจำนวน Id ที่ไม่ซ้ำกันในชุดที่กรองได้= 3- เปรียบเทียบกับจำนวนที่คาดหวัง (3 ค่า)- คืนค่า
1(TRUE) หรือ0(FALSE)
การประยุกต์ใช้
ตรวจสอบว่ามีข้อมูลครบทุก Category
SELECT COUNT(DISTINCT Category) = 5
FROM Products
WHERE Category IN ('Electronics', 'Clothing', 'Books', 'Home', 'Sports');
ใน Application Logic (Stored Procedure)
DELIMITER //
CREATE PROCEDURE CheckAllCategoriesExist()
BEGIN
DECLARE hasAll BOOLEAN;
SELECT COUNT(DISTINCT Category) = 5 INTO hasAll
FROM Products
WHERE Category IN ('Electronics', 'Clothing', 'Books', 'Home', 'Sports');
IF hasAll THEN
SELECT 'All categories present';
ELSE
SELECT 'Some categories missing';
END IF;
END //
DELIMITER ;
เทคนิคเกี่ยวข้อง
EXISTS (สำหรับตรวจสอบมีอย่างน้อย 1)
SELECT EXISTS(SELECT 1 FROM DemoTable WHERE Id IN (100, 103, 102));
GROUP BY + HAVING (ดูรายละเอียด)
SELECT Id, COUNT(*)
FROM DemoTable1219
WHERE Id IN (100, 103, 102)
GROUP BY Id
HAVING COUNT(*) > 0;
ข้อควรระวัง
COUNT(DISTINCT ...)นับค่าที่ไม่ซ้ำ หากมี Duplicate Id จะนับครั้งเดียว- ใช้
COUNT(*) = 3หากต้องการนับรวม Duplicate ด้วย - คืนค่า Boolean (1/0) ใช้ใน IF Condition ได้เลย
สรุป
ใช้ COUNT(DISTINCT col) = N WHERE col IN (...) ตรวจสอบว่ามีแถวครบทุกค่าที่ระบุใน IN() ได้ใน Query เดียว