JOIN i DELETE w mySQL

Parę dni temu zdarzyło się próbować usunąć rekordy z bazy mySQL, które warunki do usunięcia spełniały w innych tabelach. I o ile programistycznie, można cel osiągnąć za pomocą kilku odwołań do bazy, to jednak postanowiłem wykonać jedno.

Jak wygląda standardowe zapytanie DELETE każdy wie. Wychodząc z tego punktu, szybko rozszerzyłem podstawową wersję zapytania o JOIN i Aliasy:

DELETE FROM table AS t
LEFT JOIN other_table AS o ON o.table_id=t.id WHERE o.condition=1;

Niestety, może i klient mySQL przełknie to zapytanie, ale sam mySQL już nie. Zapytanie poprawnie powinno wyglądać tak:

DELETE t FROM table AS t
LEFT JOIN other_table AS o ON o.table_id=t.id WHERE o.condition=1;

Gdzie ustalamy, z której tabeli konkretnie chcemy usunąć wiersze. Więcej na ten temat można przeczytać o dziwo w dokumentacji mySQL. Oczywiście, można jeszcze próbować zapytań zagnieżdżonych:

DELETE FROM table WHERE id IN
(SELECT table_id FROM other_table WHERE condition=1);

Komentarze

Comments powered by Disqus