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

แสดงเฉพาะแถวที่ Id ไม่ซ้ำกันใน MySQL ด้วย GROUP BY HAVING COUNT < 2

การกรองเฉพาะแถวที่มี 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