首页 > 数据库技术 > 详细

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

时间:2016-01-04 15:34:45      阅读:458      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!