溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

mysql報(bào)錯(cuò)ERROR 1093

發(fā)布時(shí)間:2020-08-11 09:54:02 來源:ITPUB博客 閱讀:265 作者:賀子_DBA時(shí)代 欄目:MySQL數(shù)據(jù)庫
今天在嘗試用子查詢來關(guān)聯(lián)更新一個(gè)表的收到如下報(bào)錯(cuò):
ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause
具體執(zhí)行的sql如下:
MySQL [meminfo]> update v_member_info set cust_right_group=0 where id in (select id from v_member_info where pay_end_date<'2018-01-29' and cust_right_group>0);
ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause
原來是mysql在update的時(shí)候, 原始表不能出現(xiàn)在where 后面第一層的子查詢中;
解決辦法:兩種改寫方法
1)改寫成join方式更新
MySQL [meminfo]> update v_member_info as a ,(select id,cust_right_group from v_member_info where pay_end_date<'2018-01-29' and cust_right_group>0) as b set a.cust_right_group=0 where a.id=b.id;
Query OK, 288 rows affected (2.35 sec)
Rows matched: 288 Changed: 288 Warnings: 0
2)或者改成子查詢之子查詢
MySQL [meminfo]> update v_member_info set cust_right_group=0 where id in(select id from (select id from v_member_info where pay_end_date<'2018-01-29' and cust_right_group>0)a);
小結(jié):Oracle和MySQL還是有區(qū)別的,MySQL在update的時(shí)候,原始表不能出現(xiàn)在where 后面第一層的子查詢當(dāng)中,至于兩種改寫的性能的看具體業(yè)務(wù)和數(shù)據(jù)量的大小。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI