表A中有ID、NAME、CODE字段。要查出NAME、CODE字段重复的数据,重复的记录中,仅保留ID最大的,删除其它重复的数据。
查询需要删除的记录sql如下:
比较笨的SQL:
改进后的SQL:
查询需要删除的记录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)