sql >> Databasteknik >  >> RDS >> Mysql

Ta bort dubbletter av rader i MySQL (ignorerar primärnyckel)

Följande exempel tar bort dubbletter av rader i MySQL samtidigt som primärnyckeln eller den unika identifierarkolumnen ignoreras.

Exemplet tar bort dubbletter av rader men behåller en. Så i fallet med två identiska rader, tar den bort en av dem och behåller den andra.

Exempeldata

Anta att vi har en tabell med följande 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 att de två första raderna är dubbletter och de sista tre raderna är dubbletter.

Hitta dubbletter

Låt oss först välja kolla vår tabell för att se hur många rader som är dubbletter:

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 att det finns två rader med Bark Smith och tre rader med Wag Johnson.

Vi kommer att dedupera tabellen så att den bara innehåller en av varje.

Ta bort dubbletterna

Att köra följande kod de-duperar tabellen ovan:

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)

Låt oss se resultatet:

SELECT * FROM Dogs;

Resultat:

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

Vi har tagit bort dubbletter av rader från tabellen.


  1. SQLite Group By

  2. ÄNDRA KOLUMN i Oracle - Hur kontrollerar jag om en kolumn är nullbar innan den ställs in på nullbar?

  3. PostgreSQL-handledning för nybörjare – Allt du behöver veta om PostgreSQL

  4. Hur SQLite Rtrim() fungerar