Das Problem ist, dass MySQL Ihnen aus irgendwelchen dummen Gründen nicht erlaubt, Abfragen wie diese zu schreiben:
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM myTable
INNER JOIN ...
)
Das heißt, wenn Sie ein UPDATE
durchführen /INSERT
/DELETE
auf eine Tabelle können Sie diese Tabelle nicht in einer inneren Abfrage referenzieren (Sie können verweisen Sie jedoch auf ein Feld aus dieser äußeren Tabelle ...)
Die Lösung besteht darin, die Instanz von myTable
zu ersetzen in der Unterabfrage mit (SELECT * FROM myTable)
, so
UPDATE myTable
SET myTable.A =
(
SELECT B
FROM (SELECT * FROM myTable) AS something
INNER JOIN ...
)
Dies bewirkt anscheinend, dass die erforderlichen Felder implizit in eine temporäre Tabelle kopiert werden, also ist es erlaubt.
Ich habe diese Lösung gefunden hier . Eine Anmerkung zu diesem Artikel:
Sie möchten nicht nur SELECT * FROM table
in der Unterabfrage im wirklichen Leben; Ich wollte nur die Beispiele einfach halten. In Wirklichkeit sollten Sie nur die Spalten auswählen, die Sie in dieser innersten Abfrage benötigen, und ein gutes WHERE
hinzufügen Klausel, um die Ergebnisse ebenfalls einzuschränken.