Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ตรวจสอบว่ามีหลายแถวที่ตรงเงื่อนไขใน MySQL ด้วย COUNT(DISTINCT) และ IN()

ภาพรวม

ใช้ 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 ค่า)
+----------------------+

การทำงาน

  1. WHERE Id IN (100, 103, 102) - กรองเฉพาะแถวที่ Id อยู่ในชุดนี้
  2. COUNT(DISTINCT Id) - นับจำนวน Id ที่ไม่ซ้ำกันในชุดที่กรองได้
  3. = 3 - เปรียบเทียบกับจำนวนที่คาดหวัง (3 ค่า)
  4. คืนค่า 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 เดียว