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

Reines CSS, um coole Neonlichteffekte zu erzielen (mit Demo)

Ich habe kürzlich die Tutorial-Reihe zu CSS-Anima...

CSS3 ändert den Bildlaufleistenstil des Browsers

Hinweis: Diese Methode ist nur auf WebKit-basiert...

Vue-Überwachungseigenschaften und berechnete Eigenschaften

Inhaltsverzeichnis 1. Überwachungseigenschaften a...

Ausführliche Erklärung zu Sitzung und Cookie in Tomcat

Vorwort HTTP ist ein zustandsloses Kommunikations...

Beispielcode zur Implementierung einer Upload-Komponente mit Vue3

Inhaltsverzeichnis Allgemeine Entwicklung von Upl...

HTML- und CSS-Grundlagen (unbedingt lesen)

(1) HTML: HyperText Markup Language, die im Wesen...

SQL-Implementierung von LeetCode (196. Doppelte Postfächer löschen)

[LeetCode] 196.Doppelte E-Mails löschen Schreiben...

Vue verwendet Element-UI, um die Menünavigation zu implementieren

In diesem Artikel wird der spezifische Code von V...

Top 10 Js Bildverarbeitungsbibliotheken

Inhaltsverzeichnis einführen 1. Pica 2. Lena.js 3...