1. ProblemeinführungNehmen Sie ein Szenario an, in dem eine Benutzertabelle 3 Felder enthält. ID, Identitäts-ID, Name. Jetzt gibt es viele doppelte Daten für die ID-Nummer „identity_id“ und den Namen „name“, die gelöscht werden müssen, und nur ein gültiger Wert bleibt erhalten. 2. Simulationsumgebung1. Melden Sie sich bei der MySQL-Datenbank an und erstellen Sie eine separate Testdatenbank mysql_exercise Datenbank mysql_exercise-Zeichensatz utf8 erstellen; 2. Erstellen Sie die Benutzertabelle users Tabelle „Benutzer“ erstellen ( id int auto_increment Primärschlüssel, Identitäts-ID varchar(20), Name varchar(20) nicht null ); 3. Testdaten einfügen in Benutzerwerte einfügen (0, „620616199409206512“, „null“), (0,'620616199409206512','Alle'), (0,'62062619930920651X','Li Si'), (0,'62062619930920651X','Li Si'), (0,'620622199101206211','Nein'), (0,'620622199101206211','Nein'), (0,'322235199909116233','Gutschein'); Sie können es mehrmals ausführen, um mehr doppelte Daten zu generieren. 4. Lösung (1) Gruppieren nach ID-Nummer und Name; (2) Holen Sie sich die maximale ID (oder minimale ID) nach der Gruppierung. (3) Löschen Sie alle Felder außer der maximalen (oder minimalen) ID. 5. Erster Versuch (fehlgeschlagen!!!) Löschen Sie Benutzer, bei denen die ID nicht vorhanden ist (wählen Sie max(id) aus der Benutzergruppe nach Identitäts-ID, Name aus); Fehler:
Denn in MySQL können Sie nicht zuerst die Datensätze einer Tabelle auswählen und dann die Datensätze derselben Tabelle gemäß denselben Bedingungen aktualisieren oder löschen. Die Lösung besteht darin, das durch erneutes Auswählen erhaltene Ergebnis über die Zwischentabelle auszuwählen, um den Fehler zu vermeiden. Dieses Problem tritt nur in MySQL auf, nicht in MSSQL und Oracle. Daher können wir zuerst die SQL-Anweisung in den Klammern herausnehmen und zuerst die maximale (oder minimale) ID finden. Wählen Sie max_id aus (wählen Sie max(id) als max_id aus der Benutzergruppe nach Identitäts-ID, Name); Dann wurde ein weiterer Fehler gemeldet! ! !
Das heißt: Die Eingabeaufforderung besagt, dass jede abgeleitete Tabelle einen eigenen Alias haben muss! Bei der Ausführung einer Unterabfrage behandelt die äußere Abfrage die innere Abfrage als Tabelle, daher müssen wir der inneren Abfrage einen Alias hinzufügen Weiter zur Korrektur: Behandeln Sie das in der Abfrage gefundene maximale (oder minimale ID-)Ergebnis als neue Tabelle, geben Sie ihm den Alias t und fragen Sie t.mix_id ab. Wählen Sie t.max_id aus (wählen Sie max(id) als max_id aus der Benutzergruppe nach Identitäts-ID, Name) als t; Die maximale (oder minimale) ID kann erfolgreich wie unten gezeigt gefunden werden: 6. Zweiter Versuch (Erfolg!!!) Löschen von Benutzern, deren ID nicht in ( wähle t.max_id aus (wählen Sie max(id) als max_id aus der Benutzergruppe nach identity_id,name) als t ); Ausführungsergebnis: Die doppelten Daten werden erfolgreich gelöscht und nur der zuletzt hinzugefügte Datensatz bleibt erhalten. Ebenso können Sie den ersten hinzugefügten Datensatz behalten (d. h. alle Datensätze außer der kleinsten ID in jeder Gruppe löschen). 3. Wissenserweiterung 1: Daten aktualisierenAndere Szenarien: Um den Status von Benutzern, deren Name eine leere Zeichenfolge ("") ist, in der Benutzertabelle user_info auf "0" zu ändern Benutzerinformationen aktualisieren, Status auf „0“ setzen, wobei Benutzer-ID in (Benutzer-ID aus Benutzerinformationen auswählen, wobei Name „“ ist) Außerdem wurde der folgende Fehler gemeldet:
Denn in MySQL können Sie nicht zuerst die Datensätze einer Tabelle auswählen und dann die Datensätze derselben Tabelle unter denselben Bedingungen aktualisieren oder löschen. Die Lösung besteht darin, die über die Zwischentabelle erhaltenen Ergebnisse erneut auszuwählen und so Fehler zu vermeiden. aktualisiere user_info setze status='0' wobei user_id in (Wählen Sie die Benutzer-ID aus (Wählen Sie die Benutzer-ID aus Benutzerinfo, wobei Name = '') t1); Das folgende Beispiel ist ebenfalls akzeptabel, mit einem kleinen Unterschied: Der Alias kann „as“ haben oder nicht, und t1.user_id kann direkt der inneren Benutzer-ID entsprechen. aktualisiere user_info setze status='0' wobei user_id in (wählen Sie t1.user_id aus (wählen Sie user_id aus user_info, wobei name='') als t1); 3.1 Schrittweise Analyse (1) Verwenden Sie die folgenden Abfrageergebnisse als Zwischentabelle: Wählen Sie die Benutzer-ID aus den Benutzerinformationen, wobei Name = „“ ist. (2) Fragen Sie die Zwischentabelle erneut als Ergebnismenge ab: Wählen Sie die Benutzer-ID aus (Wählen Sie die Benutzer-ID aus Benutzerinfo, wobei Name = „“) als t; (3) Daten aktualisieren aktualisiere user_info setze status='0' wobei user_id in (Wählen Sie die Benutzer-ID aus (Wählen Sie die Benutzer-ID aus Benutzerinfo, wobei Name='') als t1); 4. Zusatzübung: Löschen doppelter DatenSchreiben Sie eine SQL-Abfrage, um alle doppelten E-Mail-Adressen in der Personentabelle zu löschen und nur die Adresse mit der kleinsten ID zu behalten. +----+------------------+ | ID | E-Mail | +----+------------------+ | 1 | [email protected] | | 2 | [email protected] | | 3 | [email protected] | +----+------------------+ Die ID ist der Primärschlüssel dieser Tabelle. Beispielsweise sollte die obige Personentabelle nach dem Ausführen Ihrer Abfrage die folgenden Zeilen zurückgeben: +----+------------------+ | ID | E-Mail | +----+------------------+ | 1 | [email protected] | | 2 | [email protected] | +----+------------------+ Antwort 1: Löschen von Person, bei der die ID nicht vorhanden ist ( wähle t.min_id aus ( Wählen Sie min(Id) als min_id aus der Personengruppe per E-Mail ) als t ); Antwort 2: lösche p1 aus Person als P1, Person als P2 wobei p1.Email=p2.Email und p1.Id > p2.Id; ZusammenfassenDamit ist der Artikel zum Löschen doppelter Daten in einer MySQL-Datenbank und zum Behalten nur eines abgeschlossen. Weitere Informationen zum Löschen doppelter Daten in MySQL finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Erzielen Sie mit reinem CSS3 in wenigen einfachen Schritten einen 3D-Flip-Effekt
>>: Lösung für die Docker-Befehlsausnahme „Zugriff verweigert“
1. MySQL herunterladen 1. Melden Sie sich auf der...
Inhaltsverzeichnis Vorbereiten Fünf Waffen für … ...
MySQL-Speicher-Engine: Der MySQL-Server verwendet...
Umgebung: init_worker_by_lua, set_by_lua, rewrite...
Ich habe kürzlich bei der Entwicklung eines Proje...
Heute werde ich einen Quellcode mit Ihnen teilen,...
stat-Funktion und stat-Befehl Erklärung von [inod...
Karussell-Animationen können das Erscheinungsbild...
Folgen Sie dem offiziellen Tutorial, laden Sie da...
Rot und Pink und ihre Hexadezimalcodes. #990033 #...
Inhaltsverzeichnis 1. Verwenden Sie das Warehouse...
Inhaltsverzeichnis 1. Erstellen Sie ein Vue-CLI-S...
Wenn Sie den Eindruck haben, dass ein Problem mit...
In diesem Artikel wird der spezifische JS-Code zu...
Wenn viele Daten angezeigt werden müssen, ist die...