SQL: Eliminieren doppelter Zeilen in Tabellen
Herausforderung:
Sie stehen vor einer Tabelle ohne Primärschlüssel oder Einschränkungen, die mehrere Zeilen mit identischen Daten enthält. Das Ziel besteht darin, doppelte Zeilen zu entfernen und nur eine einzige Instanz jeder eindeutigen Zeile zu erhalten. Wir verwenden eine Spalte mit dem Namen „Schlüssel“, um Duplikate zu identifizieren und sicherzustellen, dass für jeden eindeutigen „Schlüssel“-Wert nur ein Eintrag vorhanden ist.
Lösung:
Dieser Prozess umfasst zwei wichtige Schritte:
Der folgende SQL-Befehl erreicht dies:
<code class="language-sql">DELETE FROM dups a USING ( SELECT MIN(ctid) as ctid, key FROM dups GROUP BY key HAVING COUNT(*) > 1 ) b WHERE a.key = b.key AND a.ctid <> b.ctid;</code>
Wichtiger Hinweis: Diese Methode bietet keine Kontrolle darüber, welche bestimmte Zeile beibehalten wird.
Anschauliches Beispiel:
Betrachten Sie diese Beispieltabelle:
<code class="language-sql">CREATE TABLE people ( name varchar(50) NOT NULL, surname varchar(50) NOT NULL, age integer NOT NULL ); INSERT INTO people (name, surname, age) VALUES ('A.', 'Tom', 30), ('A.', 'Tom', 10), ('B.', 'Tom', 20), ('B', 'Chris', 20);</code>
So finden Sie das erste Vorkommen von Duplikaten:
<code class="language-sql">SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1;</code>
Ausgabe:
ctid | name | surname |
---|---|---|
(0,1) | A. | Tom |
Löschen der nicht-ersten Duplikate:
<code class="language-sql">DELETE FROM people a USING ( SELECT MIN(ctid) as ctid, name, surname FROM people GROUP BY (name, surname) HAVING COUNT(*) > 1 ) b WHERE a.name = b.name AND a.surname = b.surname AND a.ctid <> b.ctid;</code>
Die restlichen Zeilen:
<code class="language-sql">SELECT * FROM people;</code>
Ausgabe:
name | surname | age |
---|---|---|
A. | Tom | 30 |
B. | Tom | 20 |
B | Chris | 20 |
Das obige ist der detaillierte Inhalt vonWie lösche ich effizient doppelte Zeilen aus einer Tabelle in SQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!