Fórumok
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"
postgre
Innen másoltam (így felelőséget se vállalok) :P
ez nem jó. :)
É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"
"SELECT min(place_id) FROM placex GROUP BY osm_id,osm_type eredményét"
így csak a place_id-kat szűri ki, mikor az összes oszloppal kéne.
"SELECT min(place_id) FROM placex GROUP BY osm_id,osm_type eredményét"
így csak a place_id-kat szűri ki, mikor az összes oszloppal kéne.
Sorry, gyorsban írtam a hsz-t, a min place_id mellé tedd le az elsődleges kulcsot és az alapján kapcsold az eredeti táblához.
-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"
A
után írt
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."
A place_id miatt nem tudsz DISTINCT-et használni.
szerk.: Akkor a többi miatt sem :)
-----------
"Pontban 0:00-kor nem nagyon szoktak véletlen dolgok történni"
"create temp table temp_test as select distinct * from placex;"
csináltam egy ilyen szűrést, de ugyanúgy belerakta többször a sorokat, mivel csak két oszlop (osm_id, osm_type) mezők egyeznek meg a többi nem. :D
Nominatim is full of fun..
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);