sql >> Databáze >  >> RDS >> Mysql

V klauzuli FROM nemůžete určit cílovou tabulku pro aktualizaci

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.



  1. Jak funguje SQLite Random()

  2. Systémové databáze SQL Server – Obnovení systémových databází

  3. Jak nainstalovat balíček ROracle na Windows 7?

  4. Opětovné použití SqlCommand?