Problemet er, at MySQL, uanset hvilken vanvittig årsag, ikke tillader dig at skrive forespørgsler som denne:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Det vil sige, hvis du laver en OPDATERING
/INDSÆT /
SLET
på en tabel kan du ikke referere til den tabel i en indre forespørgsel (du kan referer dog til et felt fra den ydre tabel...)
Løsningen er at erstatte forekomsten af myTable
i underforespørgslen med (SELECT * FROM myTable)
, sådan her
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Dette medfører tilsyneladende, at de nødvendige felter implicit kopieres til en midlertidig tabel, så det er tilladt.
Jeg fandt denne løsning her . En note fra den artikel:
Du vil ikke bare SELECT * FROM table
i underforespørgslen i det virkelige liv; Jeg ville bare holde eksemplerne enkle. I virkeligheden bør du kun vælge de kolonner, du har brug for i den inderste forespørgsel, og tilføje en god Hvor
klausul for også at begrænse resultaterne.