sql >> Database >  >> RDS >> Mysql

Verwijder dubbele rijen in MySQL (negert primaire sleutel)

In het volgende voorbeeld worden dubbele rijen in MySQL verwijderd terwijl de primaire sleutel of kolom met unieke identifiers wordt genegeerd.

Het voorbeeld verwijdert dubbele rijen, maar behoudt er één. Dus in het geval van twee identieke rijen, verwijdert het een ervan en behoudt het de andere.

Voorbeeldgegevens

Stel dat we een tabel hebben met de volgende gegevens:

SELECT * FROM Dogs;

Resultaat:

+---------+-------------+------------+
| DogId   | FirstName   | LastName   |
|---------+-------------+------------|
| 1       | Bark        | Smith      |
| 2       | Bark        | Smith      |
| 3       | Woof        | Jones      |
| 4       | Ruff        | Robinson   |
| 5       | Wag         | Johnson    |
| 6       | Wag         | Johnson    |
| 7       | Wag         | Johnson    |
+---------+-------------+------------+

We kunnen zien dat de eerste twee rijen duplicaten zijn en de laatste drie rijen duplicaten.

Vind de duplicaten

Laten we eerst onze tabel controleren om te zien hoeveel rijen duplicaten zijn:

SELECT 
    FirstName, 
    LastName, 
    COUNT(*) AS Count
FROM Dogs
GROUP BY FirstName, LastName
HAVING COUNT(*) > 1;

Resultaat:

+-----------+----------+-------+
| FirstName | LastName | Count |
+-----------+----------+-------+
| Bark      | Smith    |     2 |
| Wag       | Johnson  |     3 |
+-----------+----------+-------+

We kunnen zien dat er twee rijen zijn met Bark Smith en drie rijen met Wag Johnson.

We zullen de tabel ontdubbelen zodat deze slechts één van elk bevat.

Verwijder de duplicaten

Als u de volgende code uitvoert, wordt de bovenstaande tabel ontdubbeld:

DELETE d1 FROM Dogs d1
INNER JOIN Dogs d2
WHERE
    d1.DogId < d2.DogId AND
    d1.FirstName = d2.FirstName AND
    d1.LastName = d2.LastName;

Resultaat:

Query OK, 3 rows affected (0.00 sec)

Laten we het resultaat bekijken:

SELECT * FROM Dogs;

Resultaat:

+-------+-----------+----------+
| DogId | FirstName | LastName |
+-------+-----------+----------+
|     2 | Bark      | Smith    |
|     3 | Woof      | Jones    |
|     4 | Ruff      | Robinson |
|     7 | Wag       | Johnson  |
+-------+-----------+----------+

We hebben met succes dubbele rijen uit de tabel verwijderd.


  1. PostgreSQL-controlebeperking voor externe sleutelvoorwaarde

  2. VBA-code om gekoppelde tabel met primaire sleutel toe te voegen

  3. UPSERT in tabel met dynamische tabelnaam

  4. MySQL-export naar outfile:CSV escape-tekens