Problemet är att MySQL, oavsett sinnessjuk anledning, inte tillåter dig att skriva frågor så här:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Det vill säga om du gör en UPDATE
/INSERT
/DELETE
i en tabell kan du inte referera till den tabellen i en inre fråga (du kan men referera till ett fält från den yttre tabellen...)
Lösningen är att ersätta instansen av myTable
i underfrågan med (SELECT * FROM myTable)
, så här
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Detta gör tydligen att de nödvändiga fälten implicit kopieras till en temporär tabell, så det är tillåtet.
Jag hittade den här lösningen här . En anteckning från den artikeln:
Du vill inte bara
SELECT * FROM table
i underfrågan i verkligheten; Jag ville bara hålla exemplen enkla. I verkligheten bör du bara välja de kolumner du behöver i den innersta frågan och lägga till en braWHERE
klausul för att begränsa resultaten också.