mysql报错ERROR 1093[ mysql数据库 ]
mysql数据库
时间:2024-12-03 12:13:07
作者:文/会员上传
简介:
今天在尝试用子查询来关联更新一个表的收到如下报错:ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause具体执行的sql如下:MyS
以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。
今天在尝试用子查询来关联更新一个表的收到如下报错:ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause具体执行的sql如下:MySQL [meminfo]> updatev_member_info set cust_right_group=0 where id in (select idfrom v_member_infowhere pay_end_date<'2018-01-29' andcust_right_group>0);ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause原来是mysql在update的时候, 原始表不能出现在where 后面第一层的子查询中;解决办法:两种改写方法1)改写成join方式更新MySQL [meminfo]> updatev_member_info as a ,(select id,cust_right_group from v_member_infowhere pay_end_date<'2018-01-29' andcust_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: 288Changed: 288Warnings: 02)或者改成子查询之子查询MySQL [meminfo]> updatev_member_infoset cust_right_group=0 where id in(select id from (select idfromv_member_infowhere pay_end_date<'2018-01-29' andcust_right_group>0)a);小结:Oracle和MySQL还是有区别的,MySQL在update的时候,原始表不能出现在where 后面第一层的子查询当中,至于两种改写的性能的看具体业务和数据量的大小。
展开阅读全文 ∨