Heim >Datenbank >MySQL-Tutorial >Wie lösche ich effizient doppelte Zeilen in Netezza ohne eindeutige Kennung?
Effizientes Entfernen doppelter Zeilen ohne eindeutige Kennungen in Netezza
Beim Umgang mit großen Tabellen, die doppelte Zeilen enthalten, kann es schwierig sein, den effizientesten Weg zu finden, diese zu entfernen. Während diese Abfrage nachweislich in SQL funktioniert, wie sieht es mit Netezza aus?
Raw SQL-Abfrage
<code class="language-sql">WITH TempEmp AS ( SELECT name, ROW_NUMBER() OVER(PARTITION by name, address, zipcode ORDER BY name) AS duplicateRecCount FROM mytable ) DELETE FROM TempEmp WHERE duplicateRecCount > 1;</code>
Netezza-Lösung
Die DELETE-Anweisung nach der WITH-Klausel ist nicht mit Netezza kompatibel. Bitte erwägen Sie die folgende Lösung mit dem USING-Schlüsselwort:
<code class="language-sql">DELETE FROM table_with_dups T1 USING table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
Vorschau der Ergebnisse
Um Datensätze vor dem Löschen zu überprüfen, ersetzen Sie DELETE durch SELECT * und USING durch ein Komma, etwa so:
<code class="language-sql">SELECT * FROM table_with_dups T1, table_with_dups T2 WHERE T1.ctid < T2.ctid AND T1.name = T2.name AND T1.address = T2.address AND T1.zipcode = T2.zipcode;</code>
Leistungshinweise
Wenn nur wenige Duplikate erwartet werden, ist diese Lösung leistungsfähiger als die Lösung mit der NOT IN (...)-Klausel, die eine große Anzahl von Zeilen in der Unterabfrage generiert. Wenn die Schlüsselspalte außerdem NULL-Werte enthält, verwenden Sie COALESCE(), um den Vergleich durchzuführen, zum Beispiel:
<code class="language-sql">AND COALESCE(T1.col_with_nulls, '[NULL]') = COALESCE(T2.col_with_nulls, '[NULL]')</code>
Das obige ist der detaillierte Inhalt vonWie lösche ich effizient doppelte Zeilen in Netezza ohne eindeutige Kennung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!