ใช้ Subquery ร่วมกับ HAVING COUNT(...) > 1 เพื่อหาค่าที่ซ้ำ
สร้างตารางและเพิ่มข้อมูล
mysql> CREATE TABLE DemoTable (
StudentId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName VARCHAR(20),
StudentLastName VARCHAR(20)
);
mysql> INSERT INTO DemoTable(StudentFirstName, StudentLastName) VALUES
('John', 'Smith'), ('Carol', 'Taylor'), ('John', 'Doe'),
('John', 'Brown'), ('David', 'Miller');
ดูข้อมูล
mysql> SELECT * FROM DemoTable;
+-----------+------------------+-----------------+
| StudentId | StudentFirstName | StudentLastName |
+-----------+------------------+-----------------+
| 1 | John | Smith |
| 2 | Carol | Taylor |
| 3 | John | Doe |
| 4 | John | Brown |
| 5 | David | Miller |
+-----------+------------------+-----------------+
ค้นหา StudentId ที่ FirstName ซ้ำ (ปรากฏมากกว่า 1 ครั้ง)
mysql> SELECT StudentId FROM DemoTable
-> WHERE StudentFirstName = (
-> SELECT StudentFirstName FROM DemoTable
-> HAVING COUNT(StudentFirstName) > 1
-> );
ผลลัพธ์
+-----------+
| StudentId |
+-----------+
| 1 |
| 3 |
| 4 |
+-----------+
วิธีที่ดีกว่า (มาตรฐาน SQL):
SELECT StudentId FROM DemoTable
WHERE StudentFirstName IN (
SELECT StudentFirstName FROM DemoTable
GROUP BY StudentFirstName
HAVING COUNT(*) > 1
);
วิธีนี้รองรับหลายค่าที่ซ้ำได้ (Subquery เดิมอาจ error ถ้ามีหลายค่าที่ซ้ำ)