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

วิธีตรวจสอบข้อมูลซ้ำใน MySQL หลายคอลัมน์ (Composite Duplicate Check)

การใช้ GROUP BY ... HAVING COUNT(*) > 1

จัดกลุ่มตามหลายคอลัมน์ แล้วกรองเฉพาะกลุ่มที่มีมากกว่า 1 แถว

รูปแบบคำสั่ง

SELECT yourColumnName1, yourColumnName2, ..., COUNT(*) AS anyVariableName
FROM yourTableName
GROUP BY yourColumnName1, yourColumnName2, ...
HAVING COUNT(*) > 1;

ตัวอย่าง: ตรวจสอบชื่อ-นามสกุลซ้ำ

mysql> CREATE TABLE DuplicateDemo (
    -> StudentId INT NOT NULL,
    -> StudentFirstName VARCHAR(100),
    -> StudentLastName VARCHAR(100),
    -> PRIMARY KEY(StudentId)
    -> );
Query OK, 0 rows affected (0.50 sec)

mysql> INSERT INTO DuplicateDemo VALUES(1,'John','Smith');
mysql> INSERT INTO DuplicateDemo VALUES(2,'Mike','Jones');
mysql> INSERT INTO DuplicateDemo VALUES(3,'David','Smith');
mysql> INSERT INTO DuplicateDemo VALUES(4,'Carol','Taylor');
mysql> INSERT INTO DuplicateDemo VALUES(5,'David','Smith');
mysql> INSERT INTO DuplicateDemo VALUES(6,'John','Smith');
mysql> INSERT INTO DuplicateDemo VALUES(7,'John','Taylor');

ข้อมูลทั้งหมด

mysql> SELECT * FROM DuplicateDemo;
+-----------+------------------+-----------------+
| StudentId | StudentFirstName | StudentLastName |
+-----------+------------------+-----------------+
| 1         | John             | Smith           |
| 2         | Mike             | Jones           |
| 3         | David            | Smith           |
| 4         | Carol            | Taylor          |
| 5         | David            | Smith           |
| 6         | John             | Smith           |
| 7         | John             | Taylor          |
+-----------+------------------+-----------------+
7 rows in set (0.00 sec)

คำสั่งหาข้อมูลซ้ำ (FirstName + LastName)

mysql> SELECT StudentFirstName, StudentLastName, COUNT(*) AS Total
    -> FROM DuplicateDemo
    -> GROUP BY StudentFirstName, StudentLastName
    -> HAVING COUNT(*) > 1;
+------------------+-----------------+-------+
| StudentFirstName | StudentLastName | Total |
+------------------+-----------------+-------+
| John             | Smith           | 2     |
| David            | Smith           | 2     |
+------------------+-----------------+-------+
2 rows in set (0.00 sec)

การประยุกต์ใช้เพิ่มเติม:

  • ลบข้อมูลซ้ำเก็บแถวแรก: ใช้ ROW_NUMBER() (MySQL 8.0+)
  • หา PK ที่ซ้ำ: GROUP BY id HAVING COUNT(*) > 1
  • สร้าง Unique Index เพื่อป้องกัน: ALTER TABLE ADD UNIQUE INDEX idx_name (col1, col2)