標籤:
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