Soms moet u dubbele records verwijderen of dubbele rijen verwijderen in MySQL. Er zijn hoofdzakelijk 3 manieren om dubbele records in MySQL te verwijderen. Hier leest u hoe u dubbele records in MySQL verwijdert.
MySQL dubbele records verwijderen
Hier zijn de stappen om dubbele records in MySQL te verwijderen. Stel dat u de volgende tabel dup_orders(id, bedrag) . heeft met dubbele records.
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 | +------+--------+
Bonus lezen:dubbele records in MySQL krijgen
Dubbele rijen verwijderen in MySQL
Laten we eens kijken naar elk van de 3 manieren om dubbele records in MySQL te verwijderen.
1. Verwijder dubbele records met behulp van tussentabel
Deze methode omvat 3 stappen. Selecteer eerst rijen zonder duplicaten, uit dup_orders tabel en plaats ze in een andere tabel. Hier is de syntaxis ervoor.
CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];
Dit is onze vraag om afzonderlijke rijen van dup_orders naar een andere tabel te selecteren.
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 | +------+--------+
De bovenstaande zoekopdracht verwijdert rijen die dubbel zijn, dat wil zeggen dubbele waarden voor alle kolommen.
Als u rijen met dubbele waarden voor slechts een of meer maar niet alle kolommen wilt verwijderen, kunt u een GROUP BY-component in de bovenstaande query gebruiken. Als u bijvoorbeeld alleen rijen met dubbele ID-kolomwaarden in uw tabel wilt gebruiken, gebruikt u de volgende query.
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 | +------+--------+
Zodra u de tussenliggende tabel heeft gemaakt, laat u de originele tabel vallen.
mysql> drop table dup_orders;
Hernoem tot slot de tussentabel naar de originele tafel.
mysql> alter table dup_orders_copy rename to dup_orders; mysql> select * from dup_orders; +------+--------+ | id | amount | +------+--------+ | 1 | 100 | | 2 | 350 | +------+--------+
Bonus Lezen:MySQL Voeg Unieke Constain toe
2. Verwijder dubbele rijen met INNER JOIN
U kunt dubbele rijen ook verwijderen door een combinatie van DELETE- en INNER JOIN-instructies te gebruiken. In dit geval moet uw tabel echter ten minste één unieke kolom hebben (bijv. primaire sleutel). Stel dat u de volgende dup_orders . heeft tabel met dubbel bedrag waarden maar unieke id waarden.
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 | +------+--------+
U kunt de bovenstaande tabel met zichzelf samenvoegen met behulp van een INNER JOIN en dubbele rijen verwijderen met de volgende query.
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 | +------+--------+
De bovenstaande query behoudt de hoogste id van de rij voor elke dubbele rij. Als u de rij met de laagste id wilt behouden, gebruikt u de volgende zoekopdracht.
mysql> DELETE t1 FROM dup_orders t1 INNER JOIN dup_orders t2 WHERE t1.id >> t2.id AND t1.amount = t2.amount;
Bonus Lezen:MySQL Kolom hernoemen
3. Verwijder dubbele records met ROW_NUMBER()
U kunt ook dubbele records uit de tabel verwijderen met de functie ROW_NUMBER(), beschikbaar sinds 8.0.2. Hier is de SQL-query om rijnummers van dubbele rijen te krijgen
SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];
Dit is de vraag om het rijnummer voor de dup_orders-tabel te krijgen
SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number from dup_orders;
We zullen dit gebruiken als een subquery in onze SQL-query om dubbele rijen te verwijderen, zoals hieronder weergegeven
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 )
Hopelijk kunt u nu gemakkelijk dubbele records in MySQL verwijderen.
Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te controleren. Probeer het vandaag nog!