David Wheeler wird das folgende herrliche Zitat zugeschrieben (wobei gerne nur der erste Teil zitiert wird):
Any problem in computer science can be solved with another layer of indirection. But that usually will create another problem.
Was hat nun MySQL damit zu tun? Nun, die nehmen den ersten Teil wörtlich. Gegeben sei folgende Tabelle
mysql> create table foo (a int, b int);
mysql> insert into foo values (1,2);
mysql> insert into foo values (3,4);
Nun möchte ich folgendes versuchen:
mysql> update foo set a = (select a from foo where b = 2) where b = 4;
ERROR 1093 (HY000): You can't specify target table 'foo' for update in FROM clause
Damit kommen wir zu David Wheeler:
mysql> update foo set a = (select a from (select * from foo where b = 2) as x) where b = 4;
Query OK, 1 row affected (0.00 sec)
Kein weiterer Kommentar…