DELETE FROM Tabla
WHERE id IN (
SELECT id FROM Tabla WHERE blabla
)
Működik? Persze, hogy nem. De van workaround!
DELETE FROM Tabla
WHERE id IN (
SELECT id FROM (SELECT * FROM Tabla) WHERE blabla
)
Gondolom nem kell részleteznem a sebességét, hiába gyors maga a query.
Szerencsére van egy fél fokkal kulturáltabb megoldás, már ha valaki végigolvassa az apró betűst is a doksiban:
DELETE Tabla
FROM Tabla
LEFT JOIN MasikTabla ON ...
WHERE blablabla
És akkor most vessünk egy pillantást a PostgreSQL doksijára, ahol az, hogy ezt hogy kell megoldani, már a legelején az összegzésből kiderül, hogy hogyan kivitelezhető és még csak véletlen sem kell ilyen subquerys bohóckodás, ha csak simán lustaságból valaki be akar emelni egy már jól megírt, tesztelt queryt egy DELETE-hez.
- saxus blogja
- A hozzászóláshoz be kell jelentkezni
- 1219 megtekintés
Hozzászólások
Nem eleg lecserelni a SELECT-et DELETE-re? JOIN ugyanugy mukodik.
- A hozzászóláshoz be kell jelentkezni
Nem, DELETE után a FROM előtt külön egzaktul meg kell mondani, hogy hol törölsz. Bejegyzés végén pont erről van szó.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Nekem nem tűnik ez a doksiban apró betűsnek, még görgetni sem kell hozzá, a 3. alcím.
- A hozzászóláshoz be kell jelentkezni
Akkor hasonlítsd össze a linkelt pgsql doksival.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Láttam, szerintem nincs nagy különbség, mindkettő áttekinthető, csak MySQL-nél külön ki van emelve az egytáblás és a több táblás szintaxis.
- A hozzászóláshoz be kell jelentkezni
En sem erzem ezt fajdalmas dolognak, minap kellett ilyesmi, gyors google kereses megmondta a megoldast, amit te is megtalaltal vegul
- A hozzászóláshoz be kell jelentkezni
Elég szomorú, ha te nem érzed fájdalmas dolognak azt, hogy egy kitesztelt queryt nem lehet egy másikban csak úgy subqueryként használni, hanem át kell alakítani valami teljesen másikra.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
off
van valami elvi oka annak, hogy a
SELECT id FROM (SELECT * FROM Tabla) WHERE blabla
kifejezést nem optimalizálja ki a bármi
SELECT id FROM Tabla WHERE blabla
kifejezéssé?
köszi!
/off
--
blogom
- A hozzászóláshoz be kell jelentkezni
Mondjuk egyik oka lehet az volt, hogy az régi MySQL volt. De bevallom őszintén nem néztem explaint. Lehet, hogy az újabbak valamivel értelmesebbek, de régen a MySQL elég csehül állt a subquerykkel.
PostgreSQL kioptimalizálja. MSSQL-ről feltételezem, hogy kioptimalizálja (nem próbáltam ki), másról nem tudok nyilatkozni munkám során 99%, hogy Pg-vel vagy MSSQL-el dolgozok.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
köszönöm.
őszintén, nem vagyok erős DB oldalon, s nem voltam benne biztos, hogy a kettő tényleg ekvivalens. de ezek szerint az, csak a mysql nem optimalizálja ki. kösz, mégegyszer.
--
blogom
- A hozzászóláshoz be kell jelentkezni
Teljesen ekvivalens a kettő.
Igazából a posztban lévő 3 DELETE query is ekvivalens, más kérdés, hogy a legelső a MySQL gyökérsége miatt nem megy.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni