平时经常会遇到数据表中的数据重复需要去重的问题,这里拿医保目录举例,同一个药品,在同一个供应商情况下,可能会编码一样,实际上可能产品一样,今年换了包装;对于院内来说,这个重复是没必要的,那么我们下载到这种目录之后,需要去重,需要删除一部分不需要的数据。
医保目录表名为: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 )
看到第三步,大家是不是恍然大悟
留下您的脚步
最近评论