Problém je v tom, že MySQL vám z jakéhokoli nesmyslného důvodu neumožňuje psát dotazy jako je tento:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Tedy pokud provádíte UPDATE /INSERT /DELETE v tabulce, nemůžete na tuto tabulku odkazovat ve vnitřním dotazu (můžete může nicméně odkazujte na pole z této vnější tabulky...)
Řešením je nahradit instanci myTable v dílčím dotazu pomocí (SELECT * FROM myTable) , takhle
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
To zřejmě způsobí, že se nezbytná pole implicitně zkopírují do dočasné tabulky, takže je to povoleno.
Našel jsem toto řešení zde . Poznámka z toho článku:
Nechcete jen
SELECT * FROM tablev poddotazu v reálném životě; Jen jsem chtěl ponechat příklady jednoduché. Ve skutečnosti byste měli v tomto nejvnitřnějším dotazu vybrat pouze sloupce, které potřebujete, a přidat dobréWHEREklauzule omezující také výsledky.