duplikátumok törlése, egy sor meghagyásával

Fent említett feladatot próbálom megoldani, de olyan megoldás kéne ami a leggyorsabb(pl. belső select nélkül) mert a táblában több millió rekord van.
Az én megoldásom:
DELETE FROM placex WHERE place_id not in (SELECT min(place_id) FROM placex GROUP BY osm_id,osm_type);

Hogy lehetne ezt belső select nélkül megoldani? :)

válaszokat előre is köszi!

Hozzászólások

Milyen adatbázis kezelő?

-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"

Én ezt úgy csinálnám meg, hogy csinálnék egy temp táblát, ahová beszúrnám a SELECT min(place_id) FROM placex GROUP BY osm_id,osm_type eredményét, majd inner join az eredeti táblával és az összes rekordot beszúrnám egy újabb táblába, csak előtte a temp tábla egyetlen mezőjét megtenném elsődleges kulcsnak. Majd két átnevezéssel megcserélném a két táblát.

-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"

A

SELECT

után írt

DISTINCT

kitétel az azonos sorok közül nem csak egyet hagy meg az eredményhalmazban?

Ezt nem lehetne valahogy felhasználni?

G.

============================================
"Share what you know. Learn what you don't."

Na tempbe kiszűrtem a duplikátumokat és úgy töröltem a túróba az egészet.. :)
viszont van ilyen lekérdezés ami az egynél több rekordot és még gyors is:


DELETE FROM placex WHERE place_id IN (SELECT place_id FROM (SELECT place_id, ROW_NUMBER() OVER (PARTITION BY osm_id, osm_type ORDER BY place_id) AS rnum FROM placex) t WHERE t.rnum>1);