技术思绪摘录旅行笔记
以实际场景来理解怎么从一步一步的查询,到最后删除多条,保留一条的,本文做一个备忘,如果有更好的方案,可以交流哦

平时经常会遇到数据表中的数据重复需要去重的问题,这里拿医保目录举例,同一个药品,在同一个供应商情况下,可能会编码一样,实际上可能产品一样,今年换了包装;对于院内来说,这个重复是没必要的,那么我们下载到这种目录之后,需要去重,需要删除一部分不需要的数据。

医保目录表名为:medicare_catalog

医保目录编码字段为:Aaz231


一、查询有没有重复的

SELECT `Aaz231`,COUNT(1) FROM medicare_catalog GROUP BY `Aaz231` HAVING COUNT(1) >1

二、查询重复的以及第一条的id,这个id就是保留的id

SELECT `Aaz231`,min(Id)  FROM medicare_catalog GROUP BY `Aaz231`  HAVING COUNT(1) >1

这里的min()方法,用的很巧妙

三、删除重复的,但是不删除保留的id

DELETE from medicare_catalog where
-- 删除所有的重复数据
`Aaz231` in (
    SELECT * from (SELECT `Aaz231`FROM medicare_catalog GROUP BY `Aaz231`  HAVING COUNT(1) >1) tmp2
)
-- 但一些特定ID的记录不进行删除
AND
id NOT in(
    select id from (
        SELECT `Aaz231`,min(Id) as id  FROM medicare_catalog GROUP BY `Aaz231` HAVING COUNT(1) >1
    ) tmp1
)

看到第三步,大家是不是恍然大悟

CarsonIT 微信扫码关注公众号 策略、创意、技术

留下您的脚步

 

最近评论

查看更多>>

站点统计

总文章数:275 总分类数:18 总评论数:88 总浏览数:156.42万

精选推荐

阅读排行

友情打赏

请打开您的微信,扫一扫