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 table
v 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éWHERE
klauzule omezující také výsledky.