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

ค้นหาแถวซ้ำตามคอลัมน์หนึ่งหรือสองคอลัมน์ใน MySQL

ใช้ 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 ถ้ามีหลายค่าที่ซ้ำ)