Einige Möglichkeiten zum Eliminieren doppelter Zeilen in MySQL

Einige Möglichkeiten zum Eliminieren doppelter Zeilen in MySQL

SQL-Anweisung

/*
Einige Methoden zum Eliminieren doppelter Zeilen in MySQL ---Chu Minfei
---2010-08-12 22:49:44.660
--Bitte geben Sie beim Zitieren oder Nachdruck die Quelle an: http://blog.csdn.NET/feixianxxx
*/
----------------Alle Felder werden wiederholt------------------------
 --1 Verwenden Sie die Tabellenersetzung, um Duplikate zu entfernen. Erstellen Sie eine Tabelle test_1 (ID int, Wert int);
 füge test_1 ein, wähle 1,2, vereinigung alle, wähle 1,2, vereinigung alle, wähle 2,3;
 --Erstellen Sie eine leere temporäre Tabelle mit der gleichen Struktur wie die Quelltabelle. create table tmp like test_1;
 --Eindeutige Datensätze in die temporäre Tabelle einfügen insert tmp select distinct * from test_1;
 --Löschen Sie die ursprüngliche Tabelle. Drop-Tabelle test_1;
 --Ändern Sie den Namen der temporären Tabelle in die Zieltabelle. Benennen Sie die Tabelle tmp in test_1 um.
 --showmysql> wähle * aus test_1;
+------+--------+
| ID | Wert |
+------+--------+
| 1 | 2 |
| 2 | 3 |
+------+--------+
 --2. Fügen Sie die Attributspalte auto_increment hinzu (diese Methode kann nur für MyISAM- oder BDB-Engine-Tabellen verwendet werden)
 Tabelle test_1 erstellen (ID int, Wert int) Engine=MyISAM;
 füge test_1 ein, wähle 1,2, vereinigung alle, wähle 1,2, vereinigung alle, wähle 2,3;
 Tabelle ändern, test_1, ID2 hinzufügen, int nicht null, auto_increment,
 Primärschlüssel hinzufügen (ID, Wert, ID2);
 wähle * aus test_1;
+----+-------+-----+
| ID | Wert | ID2 |
+----+-------+-----+
| 1 | 2 | 1 |
| 1 | 2 | 2 |
| 2 | 3 | 1 |
+----+-------+-----+
  Löschen Sie aus Test_1, wobei ID2<>1;
  Tabelle ändern, Test_1, ID2 löschen;
  wähle * aus test_1;
  +----+--------+
| ID | Wert |
+----+--------+
| 1 | 2 |
| 2 | 3 |
+----+--------+
-------------------Einige Felder wiederholen sich---------------------
--1. Fügen Sie einen Index hinzu, indem Sie die Tabelle test_2 (ID int, Wert int) erstellen.
 füge test_2 ein, wähle 1,2, vereinigung aller, wähle 1,3, vereinigung aller, wähle 2,3;
 Ändern Sie die IGNORE-Tabelle test_2 und fügen Sie den Primärschlüssel (ID) hinzu.
 wähle * aus test_2;
 +----+--------+
| ID | Wert |
+----+--------+
| 1 | 2 |
| 2 | 3 |
+----+--------+
 Wir können sehen, dass der Datensatz 1 3 verschwunden ist. Wir können hier auch die Unique-Einschränkung verwenden, da die Spalte möglicherweise NULL-Werte enthält, aber hier kann NULL mehrfach sein.
 --2.Join-Tabelle löschen, Tabelle erstellen test_2(id int,value int);
 füge test_2 ein, wähle 1,2, vereinigung aller, wähle 1,3, vereinigung aller, wähle 2,3;
 lösche A aus test_2 a verbinde (wähle MAX(Wert) als v ,ID aus test_2 gruppiere nach ID) b
 auf a.id=b.id und a.value<>bv;
 wähle * aus test_2;
 +------+--------+
| ID | Wert |
+------+--------+
| 1 | 3 |
| 2 | 3 |
+------+--------+
--3. Die Verwendung von Increment_auto kann auch die zweite Methode sein, um Duplikate aus allen oben genannten Feldern zu entfernen. --4. Fehleranfällige Methoden --Einige Freunde denken möglicherweise an die Unterabfragemethode. Probieren wir es aus. create table test_2 (id int, value int);
 füge test_2 ein, wähle 1,2, vereinigung aller, wähle 1,3, vereinigung aller, wähle 2,3;
 lösche a aus test_2 a, wo existiert (wähle * aus test_2, wo a.id=id und a.value<value);
 /*FEHLER 1093 (HY000): Sie können in der FROM-Klausel keine Zieltabelle „a“ für die Aktualisierung angeben*/
 
 Derzeit ist es nicht möglich, in einer Unterabfrage aus einer Tabelle zu löschen und gleichzeitig aus derselben Tabelle auszuwählen.
 
 
 ------------------Bestimmte doppelte Zeilen löschen-------------
 --Hauptsächlich durch Order by +Limit oder direktes Limit 
 Tabelle erstellen test_3(id int,value int);
 füge test_3 ein, wähle 1,2, alles vereinigen, wähle 1,3, alles vereinigen, wähle 1,4, alles vereinigen, wähle 2,3;
 --Dies dient dazu, den Datensatz mit dem kleinsten ID=1-Wert beizubehalten und die Datensätze mit anderen IDs zu löschen. Löschen Sie aus Test_3, wo ID=1 ist, sortiert nach Wert, absteigende Grenze 2;
 wähle * aus test_3;
+------+--------+
| ID | Wert |
+------+--------+
| 1 | 2 |
| 2 | 3 |
+------+--------+
 Wenn Sie nur Datensätze löschen und einen behalten möchten, können Sie die Bestellung entfernen, indem Sie

Das könnte Sie auch interessieren:
  • So löschen Sie doppelte Zeilen in MySQL
  • Vergleich der von der MySQL-Datenbank unterstützten Speicher-Engines
  • MySQL hilft Ihnen, Index-Pushdown in Sekunden zu verstehen
  • So finden und löschen Sie doppelte Zeilen in MySQL

<<:  Die Verwendung von setState in React und die Verwendung von synchron und asynchron

>>:  Verwandte Befehle zur vollständigen Deinstallation von Nginx unter Ubuntu 16.04

Artikel empfehlen

Was Sie über MySQL-Sperren wissen müssen

1. Einleitung MySQL-Sperren können je nach Umfang...

Installieren Sie MySQL 5.7 unter Ubuntu 18.04

Dieser Artikel wurde unter Bezugnahme auf die off...

Anwendung zur Verarbeitung von HTML-Tag-Überläufen

Verwenden Sie CSS, um Bildlaufleisten zu ändern 1...

Docker installiert ClickHouse und initialisiert den Datentest

Clickhouse-Einführung ClickHouse ist ein spalteno...

10 inhaltliche Prinzipien zur Verbesserung der Website-Performance

<br />Englische Adresse: http://developer.ya...

Zusammenfassung der in MySQL häufig verwendeten Verkettungsanweisungen

Vorwort: In MySQL wird die Funktion CONCAT() verw...

Docker-Image-Optimierung (von 1,16 GB auf 22,4 MB)

Inhaltsverzeichnis Der erste Schritt der Optimier...

Detaillierte Erläuterung des Beispiels für MySQL-Integritätsbeschränkungen

Dieser Artikel beschreibt die MySQL-Integritätsbe...

MySQL Flush-List und Flushing-Mechanismus für Dirty Pages

1. Überprüfung Der Pufferpool wird nach dem Start...

Vue verwendet drei Methoden zum Aktualisieren der Seite

Beim Schreiben von Projekten stoßen wir häufig au...

MySQL-Datenbank-JDBC-Programmierung (Java stellt eine Verbindung zu MySQL her)

Inhaltsverzeichnis 1. Grundvoraussetzungen für di...

Nützliche Codes zum Erstellen von Webseiten

<br />Wie kann ich die Bildlaufleiste auf de...

Vue implementiert Paging-Funktion

In diesem Artikelbeispiel wird der spezifische Co...