Hallo
Lassen wir die DELETE-Klausel einmal aussen vor. Jetzt habe ich es mit dem Beispiel aus der Dokumentation versucht, das eigentlich gehen sollte.
UPDATE t ... WHERE col = (SELECT (SELECT ... FROM t...) AS _t
mein MySQL-Befehl:
UPDATE t1 SET col='aaa' WHERE id = ( SELECT ( SELECT id FROM t1 ) AS _t WHERE _t.id ='11064' );
erstens ist die Anweisung fehlerhaft, zweitens ist sie unsinnig.
Schauen wir uns das im Detail an:
1. Fehler
UPDATE t1 -- Du möchtest Inhalte von Tabelle t1 modifizieren
SET col='aaa'
WHERE id = (
SELECT (
SELECT id FROM t1 -- Dann solltest Du im Subselect einen Tabellenalias verwenden
) AS _t
WHERE _t.id ='11064'
)
#1093 - You can't specify target table 't1' for update in FROM clause
Logisch. Die Fehlermeldung käme auch, wenn nicht schon vorher ein Fehler wäre.
2. Fehler:
UPDATE t1 -- Du möchtest Inhalte von Tabelle t1 modifizieren
SET col='aaa' -- und zwar die Werte in den Zeilen, deren id
WHERE id = ( -- bestimmten Werten entspricht
SELECT ( -- Dein Subselect ergibt zwar nur einen Wert
SELECT id FROM t1 -- dennoch ist das ein Syntax-Verstoß, weil
) AS _t -- das auf Zufall beruht
WHERE _t.id ='11064' -- Verwende IN statt =
)
3. Unsinn
Warum ein doppelt geschachteltes Subselect, wenn es ein einfache IN täte?
UPDATE t1
SET col='aaa'
WHERE id IN (<Liste der entsprechenden id-Werte>) -- hier einer
Wenn Du in Wirklichkeit etwas anderes machen möchtest, dann hast Du Dein Beispiel auf unzulässige Weise vereinfacht. Gib in diesem Fall an, wie Deine Tabelle wirklich aussieht und wie Deine Kriterien wirklich aussehen.
Ich verstehe jedenfalls nicht, was Du vorhast.
Freundliche Grüße
Vinzenz