sql >> Databáze >  >> RDS >> Mysql

Smazat duplicitní řádky v MySQL (ignoruje primární klíč)

Následující příklad odstraní duplicitní řádky v MySQL a ignoruje sloupec primárního klíče nebo jedinečného identifikátoru.

Příklad odstraní duplicitní řádky, ale jeden ponechá. Takže v případě dvou stejných řádků jeden z nich smaže a druhý ponechá.

Ukázková data

Předpokládejme, že máme tabulku s následujícími údaji:

SELECT * FROM Dogs;

Výsledek:

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

Vidíme, že první dva řádky jsou duplikáty a poslední tři řádky jsou duplikáty.

Najděte duplikáty

Nejprve si vyberte v naší tabulce, kolik řádků je duplicitních:

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

Výsledek:

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

Můžeme vidět, že existují dvě řady s Barkem Smithem a tři řady s Wagem Johnsonem.

Zrušíme duplikaci tabulky tak, aby obsahovala pouze jednu z každé.

Smazat duplikáty

Spuštění následujícího kódu de-duplikuje výše uvedenou tabulku:

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

Výsledek:

Query OK, 3 rows affected (0.00 sec)

Podívejme se na výsledek:

SELECT * FROM Dogs;

Výsledek:

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

Úspěšně jsme z tabulky odstranili duplicitní řádky.


  1. Převezměte kontrolu nad svými daty pomocí Microsoft Access

  2. Příklady CONVERT_TZ() – MySQL

  3. Entity Framework 6 – Časové dotazy

  4. Přidání omezení CHECK do existující tabulky v SQL Server (T-SQL)