日期:2014-05-16  浏览次数:20466 次

删除重复数据
表A中有ID、NAME、CODE字段。要查出NAME、CODE字段重复的数据,重复的记录中,仅保留ID最大的,删除其它重复的数据。
查询需要删除的记录sql如下:
比较笨的SQL:
select *
  from test
 where id in (select b.id
                from test a, test b
               where a.name = b.name
                 and a.code = b.code
               group by b.id
              having count(b.id) > 1)
   and id not in (select max(id)
                    from test
                   where id in (select b.id
                                  from test a, test b
                                 where a.name = b.name
                                   and a.code = b.code
                                 group by b.id
                                having count(b.id) > 1)
                   group by name, code)

改进后的SQL:
select *
  from test t1
 where exists
 (select 1
          from test t2
         where t1.code = t2.code
           and t1.name = t2.name
           and t1.id != t2.id)
   and t1.id not in (select max(id) from test group by name, code)