mysql 想删除 字段为空的 数据,应该怎么删除,我写的可以查出来,删除却报错啦You can't specify target table 't_test' for update in FROM clause
DELETE FROM `t_test` WHERE id IN ( SELECT e.id FROM `t_test` e WHERE e.`json` LIKE '') ;
1 queries executed, 0 success, 1 errors, 0 warnings
查询:DELETE FROM `t_rsd_screen_result_tmp` where id in ( SELECT e.id FROM `t_rsd_screen_result_tmp` e WHERE e.`json` LIKE '')
错误代码: 1093
You can't specify target table 't_test' for update in FROM clause
执行耗时 : 0 sec
传送时间 : 0 sec
总耗时 : 0.001 sec
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
DELETE FROM `t_test` WHERE `json`='' ;
错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' WHERE `json` LIKE ''' at line 1
<e>查询:DELETE FROM `t_test` WHERE `json` LIKE '' 错误代码: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax
回复
@心安则灵 : DELETE FROM `t_test` t WHERE t.`json` LIKE '' 另外,如果like里的值是 空字符串,可以直接考虑用 等号
一个sql对同个表又查又删,系统懵逼啦
用一个临时表或者中间表,保存select 出来的id,然后删的时候的子查询用这个临时表就ok了
还有一种做法,直接delete就可以了,不用in
直接delete的写法简洁明了,缺点是当 json这个字段不是主键或者索引,且整个表数据量较大的时候,可能会悲剧
这个错误的原因是:更新这个表的同时又查询了这个表,查询这个表的同时又去更新这个表,可以理解为死锁,所以出现了这个问题。
解决方法:
在第一步中查询最小的编号时,不从主表中去查找,而是根据需要的字段从构建一个第三个表,,从第三个表中去获取数据。
1.构建第三张表:
select 编号, 学号,姓名,课程编号,课程名称,分数 from s2_test as s1
2.从第三张表中查询数据
select min(编号) as 编号 from
(select 编号, 学号,姓名,课程编号,课程名称,分数 from s2_test) as s1
GROUP BY s1.学号,s1.姓名,s1.课程编号,s1.分数
3.从总表中删除信息不在第二步查询中得到的编号的数据
DELETE from s2_test where 编号 not in
(select min(编号) as 编号 from
(select 编号, 学号,姓名,课程编号,课程名称,分数 from s2_test) as s1
GROUP BY s1.学号,s1.姓名,s1.课程编号,s1.分数)
————————————————
版权声明:本文为CSDN博主「张一柯」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_33824312/article/details/79098795