Někdy může být nutné odstranit duplicitní záznamy nebo odstranit duplicitní řádky v MySQL. Existují především 3 způsoby, jak odstranit duplicitní záznamy v MySQL. Zde je návod, jak odstranit duplicitní záznamy v MySQL.
MySQL odstraní duplicitní záznamy
Zde jsou kroky k odstranění duplicitních záznamů v MySQL. Řekněme, že máte následující tabulku dup_orders(id, částka) s duplicitními záznamy.
mysql> create table dup_orders(id int, amount int); mysql> insert into dup_orders(id,amount) values(1, 100),(1,250),(2,350),(2,350); mysql> select * from dup_orders; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 1 | 250 | | 2 | 350 | | 2 | 350 | +------+--------+
Bonusové čtení:Jak získat duplicitní záznamy v MySQL
Jak odstranit duplicitní řádky v MySQL
Podívejme se na každý ze 3 způsobů, jak odstranit duplicitní záznamy v MySQL.
1. Odstraňte duplicitní záznamy pomocí přechodné tabulky
Tato metoda zahrnuje 3 kroky. Nejprve vyberte řádky bez duplikátů z dup_orders tabulky a vložte je do jiné tabulky. Zde je jeho syntaxe.
CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];
Zde je náš dotaz na výběr odlišných řádků z dup_orders do jiné tabulky.
mysql> CREATE TABLE dup_orders_copy SELECT DISTINCT id,amount FROM dup_orders; mysql> select * from dup_orders_copy; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 1 | 250 | | 2 | 350 | +------+--------+
Výše uvedený dotaz odstraní řádky, které dokončují duplicitu, tedy duplicitní hodnoty pro všechny sloupce.
Pokud chcete odstranit řádky s duplicitními hodnotami pouze pro jeden nebo více, ale ne všechny sloupce, můžete ve výše uvedeném dotazu použít klauzuli GROUP BY. Pokud například chcete v tabulce zobrazit pouze řádky s duplicitními hodnotami sloupce ID, použijte následující dotaz.
mysql> CREATE TABLE dup_orders_copy SELECT id,amount FROM dup_orders group by id; mysql> select * from dup_orders_copy; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 2 | 350 | +------+--------+
Jakmile vytvoříte přechodnou tabulku, zrušte původní tabulku.
mysql> drop table dup_orders;
Nakonec přejmenujte přechodnou tabulku na původní tabulku.
mysql> alter table dup_orders_copy rename to dup_orders; mysql> select * from dup_orders; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 2 | 350 | +------+--------+
Bonusové čtení:MySQL Add Unique Constain
2. Odstraňte duplicitní řádky pomocí INNER JOIN
Můžete také odstranit duplicitní řádky pomocí kombinace příkazů DELETE a INNER JOIN. V tomto případě však vaše tabulka musí mít alespoň jeden jedinečný sloupec (např. primární klíč). Řekněme, že máte následující dup_orders tabulka s duplicitním částkou hodnoty, ale jedinečné id hodnoty.
mysql> insert into dup_orders(id,amount) values(1, 100),(2,250),(3,350),(4,350); mysql> select * from dup_orders; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 2 | 250 | | 3 | 350 | | 4 | 350 | +------+--------+
Výše uvedenou tabulku můžete připojit k sobě pomocí INNER JOIN a odstranit duplicitní řádky pomocí následujícího dotazu.
mysql> DELETE t1 FROM dup_orders t1 INNER JOIN dup_orders t2 WHERE t1.id < t2.id AND t1.amount = t2.amount; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 2 | 250 | | 4 | 350 | +------+--------+
Výše uvedený dotaz zachová nejvyšší ID řádku pro každý duplicitní řádek. Pokud chcete zachovat řádek s nejnižším id, použijte následující dotaz.
mysql> DELETE t1 FROM dup_orders t1 INNER JOIN dup_orders t2 WHERE t1.id >> t2.id AND t1.amount = t2.amount;
Bonusové čtení:Sloupec přejmenování MySQL
3. Odstraňte duplicitní záznamy pomocí ROW_NUMBER()
Můžete také odstranit duplicitní záznamy z tabulky pomocí funkce ROW_NUMBER() dostupné od 8.0.2. Zde je dotaz SQL pro získání čísel řádků duplicitních řádků
SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];
Zde je dotaz na získání čísla řádku pro tabulku dup_orders
SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number from dup_orders;
Použijeme to jako dílčí dotaz v našem SQL dotazu k odstranění duplicitních řádků, jak je uvedeno níže
DELETE FROM dup_orders WHERE id IN ( SELECT id FROM ( SELECT id, ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number from dup_orders ) t WHERE row_number > 1 )
Doufejme, že nyní můžete snadno odstranit duplicitní záznamy v MySQL.
Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Vyzkoušejte to ještě dnes!