„Stejné omezení platí i pro poddotazy při modifikaci záznamu – ty se také nemohou dotazovat do stejné tabulky. Takový příkaz je nutné rozdělit do dvou – nejprve získat data a v druhém kroku provést aktualizaci.“
Tohle zrovna jde, i kdyz se to musi torochu opsat
UPDATE tbl AS a INNER JOIN tbl AS b ON .... SET a.col = b.col
nebo lze upravit subquery
UPDATE tbl SET col = ( SELECT ... FROM (SELECT.... FROM) AS x);
vice http://stackoverflow.com/…-from-clause nebo http://www.xaprb.com/…et-in-mysql/
Myslím, že hodně poddotazů ve where nebo set lze přepsat do spojení.
UPDATE tabulka t, (SELECT SUM(neco) suma FROM tabulka) s SET t.sloupecek = s.suma WHERE t.id = 1
Ony vůbec ty spojení bývají v mysql jistější. Často se stane, že dokáže naplánovat
select * from tabulka where sloupec in (select max(sloupec) from tabulka)
tak, že se poddotaz vykonává pro každý řádek znovu. Proto se snažím to psát do spojení, aby na to nemohla ani pomyslet.
select t.* from tabulka t join (select max(sloupec) sloupec from tabulka) m on t.sloupec=m.sloupec