2017-06-22 2 views
0

ich eine sehr nützliche Lösch-Abfrage gefunden, die Duplikate basierend auf bestimmten Spalten löschen wird:Postgres - wählen Sie mit „mit“

DELETE FROM table USING table alias 
    WHERE table.field1 = alias.field1 AND table.field2 = alias.field2 AND 
    table.max_field < alias.max_field 

How to delete duplicate entries?

Allerdings ist es ein Äquivalent SELECT Abfrage das wird erlauben, den gleichen Weg zu filtern? Versuchte VERWENDUNG, aber kein Erfolg.

Vielen Dank.

Antwort

0

Sie können Ihre Tabelle mit sich selbst die spezifischen Spalten verwenden, field1 und field2 und dann filtern basierend auf einem Vergleich zwischen max_field auf beiden Tabellen join.

select t1.* 
from mytable t1 
    join mytable t2 on (t1.field1 = t2.field1 and t1.field2 = t2.field2) 
where t1.max_field < t2.max_field; 

Sie erhalten alle Duplikate, deren max_field nicht die größte ist.

sqlfiddle hier.