Het probleem is dat MySQL, om wat voor idiote reden dan ook, je niet toestaat om vragen als deze te schrijven:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Dat wil zeggen, als u een UPDATE
. doet /INSERT
/DELETE
op een tafel, kunt u niet naar die tabel verwijzen in een innerlijke query (u kunt echter verwijzen naar een veld uit die buitenste tabel...)
De oplossing is om de instantie van myTable
. te vervangen in de subquery met (SELECT * FROM myTable)
, zoals dit
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Dit zorgt er blijkbaar voor dat de benodigde velden impliciet worden gekopieerd naar een tijdelijke tabel, dus het is toegestaan.
Ik vond deze oplossing hier . Een opmerking uit dat artikel:
Je wilt niet gewoon
SELECT * FROM table
in de subquery in het echte leven; Ik wilde de voorbeelden eenvoudig houden. In werkelijkheid zou je alleen de kolommen moeten selecteren die je nodig hebt in die binnenste zoekopdracht, en een goedeWHERE
toevoegen. clausule om de resultaten ook te beperken.