mysql for update报错_Mysql You can’t specify target table ‘XXX’ for update in FROM clause 报错问题解决方案 | 个...

MySQL出现Mysql You can't specify target table 'XXX' for update in FROM clause,这个错误的意思是不能在同一个sql语句中,先select同一个表的某些值,然后再update这个表。

表结构:

CREATE TABLE `dhw_customer` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '1 个人 2企业 ',

`name` varchar(55) DEFAULT NULL COMMENT '姓名 (联系人)',

`position_name` varchar(55) DEFAULT NULL COMMENT '职位',

`key_words` varchar(255) DEFAULT NULL COMMENT '关键词',

`sex` tinyint(1) DEFAULT '0' COMMENT '性别 0 未知 1 男 2 女',

`created_id` int(11) NOT NULL COMMENT '创建者',

`service_id` int(11) NOT NULL COMMENT '操作者(属于者)',

`remark` varchar(255) DEFAULT NULL COMMENT '备注',

`created_at` int(11) DEFAULT NULL COMMENT '创建时间',

`updated_at` int(11) DEFAULT NULL COMMENT '更新时间',

`dispatch_id` int(11) DEFAULT NULL COMMENT '分派人id',

`dispatch_state` tinyint(1) NOT NULL DEFAULT '0' COMMENT '分派状态 1 待分派 0 不需要分派 2 已分派',

PRIMARY KEY (`id`) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=157512 DEFAULT CHARSET=utf8mb4 COMMENT='客户表';

需求:要求把目前数据中service_id为0的数据以及dispatch_id为NULL的数据,dispatch_state状态改为1

原sql语句:

UPDATE dhw_customer SET dispatch_state = 1 WHERE id in (SELECT id FROM dhw_customer WHERE service_id = 0 AND dispatch_id IS NULL)

然后报错:

UPDATE dhw_customer SET dispatch_state = 1 WHERE id in (SELECT id FROM dhw_customer WHERE service_id = 0 AND dispatch_id IS NULL)

> 1093 - You can't specify target table 'dhw_customer' for update in FROM clause

> 时间: 0.003s

修改方案:先将需要修改的数据查出来,在select一次便可解决:

(SELECT m.id FROM

(

SELECT id FROM dhw_customer WHERE service_id = 0 AND dispatch_id IS NULL

)m

)

结果:

UPDATE dhw_customer SET dispatch_state = 0 WHERE id in

(SELECT m.id FROM

(

SELECT id FROM dhw_customer WHERE service_id = 0 AND dispatch_id IS NULL

)m

)

> Affected rows: 27467

> 时间: 0.232s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值