先看示例:
SELECT uin,account,password,create_user_uin_treeFROM sys_user
结果:
表中的create_user_uin_tree标识该条记录由谁创建。
创建新用户时,根据当前登录用户的uin及新创建的用户uin,有如下SQL:
select concat(ifNULL(create_user_uin_tree,concat('_',2,'_')),'|_','97',"_")from sys_userwhere uin=2
结果:
那么修改的create_user_uin_tree的标识SQL为:
update sys_userset create_user_uin_tree=(select concat(ifNULL(temp.create_user_uin_tree,concat('_',2,'_')),'|_','97',"_")from sys_usertempwheretemp.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中不支持子查询更新,准确的说是更新的表不能在set和where中用于子查询。那串英文错误提示就是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。
两种方法:
1、select from 修改为子查询方式
2、inner join
方法1:子查询方式
调整了下SQL:
update sys_userset create_user_uin_tree=(selecttemp.treefrom (select concat(ifNULL(create_user_uin_tree,concat('_',97,'_')),'|_','98',"_")as treefrom sys_userwhere uin=97)temp)where uin=98;
我将作为子集,
select concat(ifNULL(create_us