Mysql删除重复数据并解决You can't specify target table 'xx' for update in FROM clause 报错与 query interrupted报错
哇,这个问题在纠结了N个小时总算解决了!
解决方案:
-- 在命令行方式中输入
delete from 表名 where id
in (select id from (select id from 表名where (表名.字段1,表名.字段2) in (select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1)and id not in (select min(id) from 表名 group by 字段1,字段2 having count(*)>1)
)as temp );
- 在mysql命令行模式下(不能使用workbench)首先选择数据库,然后再使用这个SQL语句
- 只需修改 id(唯一标识) , 表名 ,字段1,字段2,当然,如果有更多可能重复的字段,可以继续加 字段3 字段4 字段N 。
解释:
首先,确认能够查询到重复的数据项:
id | 字段1 | 字段2 |
1 | xxx | xxx |
2 | xxx | xxx |
select * from 表名
where (表名.字段1,表名.字段2)
in(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1)
and id not in (select min(id) from 表名 group by 字段1,字段2 having count(*)>1)
替换上面的sql语句的 ‘表名’ , ‘字段1’ , ‘字段2’ , ‘id’ 运行后即可返回想要删除的记录
如果按照传统(或网上大多数复制粘贴的答案),会这样进行数据的删除(2,3,4行没变,就改了第一行):
delete from 表名
where (表名.字段1,表名.字段2)
in(select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1)
and id not in (select min(id) from 表名 group by 字段1,字段2 having count(*)>1)
注意:
- 在mysql workbench里面出现的这类型报错是不会提示的,左下角直接就是 query interrupt ,想要知道报错原因,可以用命令行方式登录mysql
- 这样的SQL其实并没有错,如果在sql server或是oracle里是可以成功执行的,但是在mysql中是不允许的,原因不详
确认可以通过查询来找到重复的数据(这里重复的数据只保留一条,且这一条是id最小的)后,可以使用这样的方法:
delete from 表名 where id
in (select id from (select id from 表名where (表名.字段1,表名.字段2) in (select 字段1,字段2 from 表名 group by 字段1,字段2 having count(*) > 1)and id not in (select min(id) from 表名 group by 字段1,字段2 having count(*)>1)
)as temp );
这里缩进的部分与上面查询的代码大致相同,可以复制粘贴后将 * 改为 id。
Mysql删除重复数据并解决You can't specify target table 'xx' for update in FROM clause 报错与 query interrupted报错相关推荐
- mysql 删除重复数据 保留一个_MySQL学习笔记-删除重复数据只保留一条
有这样一张表,表数据及结果如下: 可以看出,school_name的字段值有重复数据(Abraham Lincoln High School 和Agoura High School分别出现两次),那么 ...
- MySql删除重复数据(只保留一条)
MySql删除重复数据 1. 问题引入 前一段遇到MySql数据重复的问题.由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板 ...
- Mysql 删除重复数据保留一条有效数据
============================== ©Copyright 蕃薯耀 2023-01-31 蕃薯耀的博客_CSDN博客-蕃薯耀分享,java,js领域博主 一.Mysql 删除重 ...
- MySQL删除重复数据只保留最新的一条
MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题. 案例描述: 按天删除表中重复数据只保留最新的一条( ...
- MySQL 语法问题:You can‘t specify target table ‘xxx‘ for update in FROM clause. 原因及解决方法
报错信息如下: [Code: 1093, SQL State: HY000] You can't specify target table 'bd_bankaccbas' for update in ...
- 错误:You can't specify target table 'xxx' for update in FROM clause的解决
今天在MySQL数据库删除重复数据的时候遇到了一个问题.如下脚本: DELETE FROM tempA WHERE tid IN ( SELECT MAX(tid) AS tid FROM tempA ...
- MySQL||SQL_ERROR_INFO: “You can‘t specify target table ‘titles_test‘ for update in FROM clause“
一.问题描述 假定test数据库存在表titles_test,表内数据如下: 先要求删除emp_no重复的记录,只保留最小的id对应的记录.编写代码如下: delete from titles_tes ...
- [Err] 1093 - You can't specify target table 'xxx' for update in FROM clause解决方法
执行开发同学提供的删除数据的sql时报错[Err] 1093 - You can't specify target table 'run_result' for update in FROM clau ...
- mysql实战(五)—— You can‘t specify target table ‘org_department‘ for update in FROM clause
系列文章目录 You can't specify target table 'org_department' for update in FROM clause 系列文章目录 背景 具体实现过程 1. ...
最新文章
- oracle hint push_pred,hints的push_pred应用-Oracle
- LOL手游2.3版皮肤大更新,端游玩家:新春级和珍稀级会返场吗
- 高通驱动一键安装_一键重装神器,装系统简单的超乎想象!
- 11_less中的条件判断
- LaTeX公式打出U上面一个小圈表示去心领域的符号:\mathring{U}
- [从架构到设计]第一回:设计,应该多一点
- 自学了三天的SeaJs学习,解决了前端的一些问题,与小伙伴们一起分享一下!...
- Mac终端使用rzsz
- usc2_今天发布:与USC合作的新游戏设计课程
- 液压传动理论教学实训
- f1c100s 源码_GitHub - hcly/f1c100s: f1c100s source code
- 云计算概念的基本介绍,云计算的特点主要有哪些?
- 喉咙肿痛症状似流感 常州一男子延误治疗险送命
- MAC 清除 DNS 缓存
- Apache Hudi的编译及安装
- Redis - Expire Setex
- 如何注册我的世界服务器账号密码,我的世界电脑服务器怎么注册登录密码
- Android斗地主游戏源码
- GeoHash算法获取附近店铺和距离
- ZYNQ PL中断PS