sql >> Database teknologi >  >> RDS >> Mysql

Slet dublerede rækker i MySQL (Ignorerer primærnøgle)

Følgende eksempel sletter duplikerede rækker i MySQL, mens primærnøglen eller den unikke identifikatorkolonne ignoreres.

Eksemplet sletter duplikerede rækker, men beholder én. Så i tilfælde af to identiske rækker, sletter den en af ​​dem og beholder den anden.

Eksempel på data

Antag, at vi har en tabel med følgende data:

SELECT * FROM Dogs;

Resultat:

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

Vi kan se, at de første to rækker er dubletter, og de sidste tre rækker er dubletter.

Find dubletterne

Lad os først vælge, tjek vores tabel for at se, hvor mange rækker der er dubletter:

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

Resultat:

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

Vi kan se, at der er to rækker med Bark Smith, og tre rækker med Wag Johnson.

Vi vil dedupere tabellen, så den kun indeholder en af ​​hver.

Slet dubletterne

Kørsel af følgende kode de-dupes ovenstående tabel:

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

Resultat:

Query OK, 3 rows affected (0.00 sec)

Lad os se resultatet:

SELECT * FROM Dogs;

Resultat:

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

Vi har fjernet duplikerede rækker fra tabellen.


  1. SQL Server 2005 og midlertidig tabelomfang

  2. En måde at få et indekssøgning efter et førende %jokertegn

  3. Hvorfor justering af SQL-ydelse er den vigtigste evne til at håndtere databaser

  4. Sådan implementeres PostgreSQL til en Docker-container ved hjælp af ClusterControl