You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause记录
生活随笔
收集整理的這篇文章主要介紹了
You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause记录
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 報錯:You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause,
百度查到說是,不能在同一語句中先select出同一表中的某些值,再update這個表 。
我原本的sql是:(刪除角色的時候,把管理員擁有的該角色信息也刪除)
update TS_AUTH_ADMIN set ROLE_IDS =CASE WHEN ROLE_IDS in (select ROLE_IDS FROM TS_AUTH_ADMIN WHERE instr(ROLE_IDS,#{roleId}+',')>0) THEN replace(ROLE_IDS,#{id}+',','') WHEN ROLE_IDS in (select ROLE_IDS FROM TS_AUTH_ADMIN WHERE instr(ROLE_IDS,#{roleId})>0) THEN replace(ROLE_IDS,#{id},'') ELSE ROLE_IDS END和:update TS_AUTH_ADMIN set ROLE_NAME =CASE WHEN ROLE_NAME in (select ROLE_NAME FROM TS_AUTH_ADMIN WHERE instr(ROLE_NAME,#{roleName}+',')>0) THEN replace(ROLE_NAME,#{roleName}+',','') WHEN ROLE_NAME in (select ROLE_NAME FROM TS_AUTH_ADMIN WHERE instr(ROLE_NAME,#{roleName})>0) THEN replace(ROLE_NAME,#{roleName},'') ELSE ROLE_NAME END
2. ? 后來我改成類似如下寫法:
update TS_AUTH_ADMIN set ROLE_NAME =(CASE WHEN instr(ROLE_NAME,'test2,')>0THEN replace(ROLE_NAME,'test2,','') WHEN instr(ROLE_NAME,'test2')>0THEN replace(ROLE_NAME,'test2','') ELSE ROLE_NAME END),ROLE_IDS =(CASE WHEN instr(ROLE_IDS,'6,')>0THEN replace(ROLE_IDS,'6,','') WHEN instr(ROLE_IDS,'6')>0THEN replace(ROLE_IDS,'6','') ELSE ROLE_IDS END)測試通過:(當然我這樣改,沒有重現問題,不算解決,只是對我的業務是可用的)
3. ? 網上說再加一層查詢可以解決:
[sql]?view plaincopy
總結
以上是生活随笔為你收集整理的You can't specify target table 'TS_AUTH_ADMIN' for update in FROM clause记录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 樱(之五月)
- 下一篇: 配置Oracle Instant Cli