今天在做数据库(mysql)更新操作时遇到了一个问题:
sql脚本如下:
UPDATE A SET A.pId = (SELECT A.id FROM A WHERE A.name = '小流量' ) WHERE A.id =( SELECT A.id FROM A WHERE A.name = 'xxx')
此时执行时会出现以下错误信息:
You can't specify target table 'xxx' for update in FROM clause
意思是:在同一个语句中不能先select出一个值,然后再进行该表的更新操作
此时,需要对以上语句进行改造,改造后的sql语句如下:
UPDATE A SET A.pId = (select A.id from A1 (SELECT A.id FROM A WHERE A.name = '小流量' ) A1 ) WHERE A.id =( select A.id from A2(SELECT A.id FROM A WHERE A.name = 'xxx') A2)
亲测可用。
注:此问题只会在mysql中出现,在oracle中不会出现此问题。