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.