Il problema è che MySQL, per qualsiasi motivo insensato, non ti consente di scrivere query come questa:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Cioè, se stai eseguendo un UPDATE
/INSERT
/DELETE
su una tabella, non puoi fare riferimento a quella tabella in una query interna (tu puoi tuttavia fai riferimento a un campo da quella tabella esterna...)
La soluzione è sostituire l'istanza di myTable
nella sottoquery con (SELECT * FROM myTable)
, così
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Questo apparentemente fa sì che i campi necessari vengano copiati implicitamente in una tabella temporanea, quindi è consentito.
Ho trovato questa soluzione qui . Una nota da quell'articolo:
Non vuoi solo SELECT * FROM table
nella subquery nella vita reale; Volevo solo mantenere gli esempi semplici. In realtà, dovresti solo selezionare le colonne di cui hai bisogno in quella query più interna e aggiungere un buon WHERE
clausola per limitare anche i risultati.