การกรองเฉพาะแถวที่มี Id Unique (ไม่ซ้ำ) ด้วย Subquery และ HAVING
เพื่อเลือกเฉพาะแถวที่คอลัมน์ Id ไม่มีค่าซ้ำในตาราง (ปรากฏเพียง 1 ครั้ง) เราใช้ Subquery หา Id ที่ COUNT(*) < 2 แล้วกรองในคำสั่งหลัก
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (Id INT, ColorName VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)
mysql> INSERT INTO DemoTable VALUES(100,'Red');
mysql> INSERT INTO DemoTable VALUES(101,'Green');
mysql> INSERT INTO DemoTable VALUES(101,'Blue');
mysql> INSERT INTO DemoTable VALUES(102,'Yellow');
mysql> INSERT INTO DemoTable VALUES(100,'Purple');
mysql> INSERT INTO DemoTable VALUES(100,'Black');
แสดงข้อมูลทั้งหมด
mysql> SELECT * FROM DemoTable;
ผลลัพธ์:
+------+-----------+
| Id | ColorName |
+------+-----------+
| 100 | Red |
| 101 | Green |
| 101 | Blue |
| 102 | Yellow |
| 100 | Purple |
| 100 | Black |
+------+-----------+
6 rows in set (0.00 sec)
คำสั่งแสดงเฉพาะแถวที่ Id ไม่ซ้ำ (Count < 2)
mysql> SELECT * FROM DemoTable
WHERE Id IN (SELECT Id FROM DemoTable GROUP BY Id HAVING COUNT(*) < 2);
ผลลัพธ์:
+------+-----------+
| Id | ColorName |
+------+-----------+
| 102 | Yellow |
+------+-----------+
1 row in set (0.07 sec)
คำอธิบาย
- Subquery:
SELECT Id FROM DemoTable GROUP BY Id HAVING COUNT(*) < 2→ ได้ Id ที่ปรากฏ 1 ครั้ง (102) - คำสั่งหลัก:
WHERE Id IN (...)→ เลือกแถวที่ Id อยู่ในรายการนั้น - Id 100 ปรากฏ 3 ครั้ง, Id 101 ปรากฏ 2 ครั้ง → ถูกตัดออก
- Id 102 ปรากฏ 1 ครั้ง → ถูกเลือก
- เทคนิคนี้ใช้ได้กับการหา "Orphan" หรือข้อมูลที่ Unique ในคอลัมน์ที่ไม่ได้เป็น Primary Key