同一行中删除MySQL已选数据 & 1093 - You can‘t specify target table ‘<table>‘ for update in FROM clause 解决方案

同一行中删除MySQL已选数据

需求

根据 id 找到 search_num 中含有 docx 的数据,并将其删除

解释

它的意思是说,你不能update你所选择select的值
原因是:你先select出同一表中的某些值,又update这个表(在同一语句中)。

原因

发生错误时,是你将这2个需求写到了同一行的命令中

# 1、选出所需字段
SELECT `search_num` FROM `report` WHERE `id` in (143, 075) AND `search_num` like '%docx';
# 2、根据所需字段,删除
DELETE FROM `report` WHERE `search_num` in ('143_test.docx', '075_test.docx');


# 合并 报错了
DELETE FROM `report` WHERE `search_num` in (SELECT `search_num` FROM`report` WHERE `id` in (143, 075) AND `search_num` like '%docx');
# 为了方便与解决方案比较,添加换行
DELETE FROM `report` WHERE `search_num` in (
	SELECT `search_num` FROM 
		`report` WHERE `id` in (143, 075) AND `search_num` like '%docx'
);

解决方案

通过中间表,绕开同一张表的限制

DELETE FROM `report` WHERE `search_num` in (
    SELECT `search_num` FROM (
        SELECT `search_num` FROM `report` WHERE `id` in (143, 075) AND `search_num` like '%docx'
    ) AS temp
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值