• 博客访问: 1447543
  • 博文数量: 203
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-12 18:11
  • 认证徽章:
个人简介

曾就职于国美控股集团有限公司 目前就职于某大型采招网 11g ocp 11g ocm 专注Oracle和mysql数据库

文章分类

全部博文(203)

文章存档

2018年(22)

2017年(52)

2016年(24)

2015年(56)

2014年(49)

分类: MySQL

2018-02-28 20:25:03

今天在尝试用子查询来关联更新一个表的收到如下报错:
ERROR 1093 (HY000): You can't specify target table 'v_member_info' for update in FROM clause
具体执行的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的时候, 原始表不能出现在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);
小结:Oracle和MySQL还是有区别的,MySQL在update的时候,原始表不能出现在where 后面第一层的子查询当中,至于两种改写的性能的看具体业务和数据量的大小。

阅读(1115) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册