前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL---mysql删除重复数据

SQL---mysql删除重复数据

作者头像
IT云清
发布2019-01-22 10:38:17
2.9K0
发布2019-01-22 10:38:17
举报
文章被收录于专栏:IT云清IT云清

开发时,经常会有清理数据库中重复数据的需求,比如下面这张表report_apply :

我们需要删除report_name重复的数据,具体步骤如下:

代码语言:javascript
复制
-- 重复数据
SELECT report_name from report_apply GROUP BY report_name HAVING count(report_name) > 1
-- 重复数据中最小的id留下
SELECT MIN(id) from report_apply GROUP BY report_name HAVING count(report_name) > 1
-- 查询所有重复数据并排除最小的id 此为需要删除的数据
SELECT id from report_apply where report_name in (
SELECT report_name from report_apply GROUP BY report_name HAVING count(report_name) > 1
)
and id NOT in(
SELECT MIN(id) from report_apply GROUP BY report_name HAVING count(report_name) > 1
)
-- 直接delete from删除会报错,所以包一层,当做一张临时表
SELECT id from (


SELECT id from report_apply where report_name in (
SELECT report_name from report_apply GROUP BY report_name HAVING count(report_name) > 1
)
and id NOT in(
SELECT MIN(id) from report_apply GROUP BY report_name HAVING count(report_name) > 1
)


) as result
-- 然后delete删除即可
DELETE from report_apply where id in (


SELECT id from (


SELECT id from report_apply where report_name in (
SELECT report_name from report_apply GROUP BY report_name HAVING count(report_name) > 1
)
and id NOT in(
SELECT MIN(id) from report_apply GROUP BY report_name HAVING count(report_name) > 1
)


) as result


)

You can't specify target table 'report_apply ' for update in FROM clause

这个错误就是因为,外面没有包一层,加一层当做一张新表就可以了。 

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月08日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档