码迷,mamicode.com
首页 > 数据库 > 详细

mysql 一个较特殊的问题:You can't specify target table 'sys_user' for update in FROM clause

时间:2016-01-04 15:38:03      阅读:442      评论:0      收藏:0      [点我收藏+]

标签:

SELECT uin,account,password,create_user_uin_tree FROM sys_user

结果:

技术分享

表中的create_user_uin_tree标识该条记录由谁创建。

创建新用户时,根据当前登录用户的uin及新创建的用户uin,有如下SQL:

select concat(ifNULL(create_user_uin_tree,concat(_,2,_)),|_,97,"_")  from sys_user where uin=2

结果:

技术分享

 

那么修改的create_user_uin_tree的标识SQL为:

update sys_user set create_user_uin_tree=(select concat(ifNULL(temp.create_user_uin_tree,concat(_,2,_)),|_,97,"_")  from sys_user temp where temp.uin=2) where uin = 97;

报错信息:

Error Code: 1093. You can‘t specify target table ‘sys_user‘ for update in FROM clause 0.000 sec

网络上的解答原因:

mysql中不能这么用。 (等待mysql升级吧)。那串英文错误提示就是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。 

调整了下SQL:

update sys_user set 
create_user_uin_tree=(select temp.tree from (select concat(ifNULL(create_user_uin_tree,concat(_,97,_)),|_,98,"_") as tree  from sys_user where uin=97) temp) where uin = 98;

我将作为子集,

select concat(ifNULL(create_user_uin_tree,concat(_,97,_)),|_,98,"_") as tree  from sys_user where uin=97) temp

然后再

select temp.tree from(子集)

 子集,这样就不会 select 和 update 都是同一个表。致此问题得到完美解决。

mysql 一个较特殊的问题:You can't specify target table 'sys_user' for update in FROM clause

标签:

原文地址:http://www.cnblogs.com/duanxz/p/5099030.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!