sql 删除数据_20191120问题sql删除表中字段中重复的数据

6301f00e08e93a1699bce170b69a408d.png

今天玩sql语句的时候遇到了这么一个问题:

如何在同一张表中查找出一个字段内相同的数据.是这么说的吧- -具体的怎么写呢- -hhh

作为一个小白我做出了这样的判断,通过分组查询出这个字段大于1的是个啥

eg:

group by count(xxxx)>1

再从表中查询这个字段完成了此次操作

select xxxx from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1

果然出来了- - hhh 然后删除重复的为了精准删除一个一条而不是删除两条数据我找到了另一条数据姑且称之为 lowId吧.我找到不是比较小的数据干掉他

select * from 表 where xxxx in 
select xxxx from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)
and 
lowIdNOT IN 
(select min(lowId) from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)

在进行了为期5分钟的查询后- -(数据量有点大 有个十几万吧) 我去看看了索引- - 哇真香(此地不介绍- - )

锁定了5条数据 然后就是愉快的删除操作了

delete from 表 where xxxx in 
select xxxx from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)
and 
lowIdNOT IN 
(select min(lowId) from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)

换一个标识搞定- - 没想到- - hhh


[Err] 1093 - You can't specify target table 'mara' for update in FROM clause

查了一下有道 //不能在FROM子句中为update指定目标表'mara'

????子句不能修改???? 好吧 那我给个名字试试 让他们玩 结果hhh 语法都不对了 好吧事到如今- -baidu...

人家说的就是:

原因在于sql语句中不能同时在查询一张表的同时进行修改或者删除这张表的操作 需要在查询的时候做一次缓存操作(不能变色么- - 算了第一天用今后再说)

缓存??哦哦哦 不懂 再去看看- -

delete from 表 where xxxx in 
(select * from (select xxxx  from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)as a)

哦!查询出来的数据作为a表 在查询一遍这就叫缓存了?? 改过之后 行吧- - 试试 hhh 在进行了长达3.2s的体验后

删了十条...重新导吧 我们再来一次- - 幸亏留下了备份的东西 要不哭去吧- -

delete from 表 where xxxx in 
(select * from (select xxxx from 表 GROUP BY xxxx HAVING COUNT(xxxx)>1)as a)
and 
lowId NOT IN 
(select * from (select min(lowId) from 表 GROUP BY xxxx HAVING COUNT(xxxx )>1)as a)

最后成功了 嘿嘿 5条 希望给之后还在玩这个的自己几个忠告

1.备份很重要不要轻视 要不删除就gundan- -

2.在没有把握的情况下尽情尝试先 - -如果错了,重新来过就好

3.自己想完实在不会再baidu - - 晚安1120..xb

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值