当前位置: 代码迷 >> Sql Server >> sql delete 删除重复记录的有关问题
  详细解决方案

sql delete 删除重复记录的有关问题

热度:30   发布时间:2016-04-24 09:05:38.0
sql delete 删除重复记录的问题
delete from Table3 where a  in(select top (1) *  from Table3 where a='1' order by a)
这个怎么没法用
错误提示
消息 116,级别 16,状态 1,第 1 行
当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。
------解决思路----------------------
当用星号的时候会查出所有字段, 这时候用 a in ( 多个字段) 逻辑上就错了.
------解决思路----------------------
就算IN这边改对了,这样也删除不了重复值
------解决思路----------------------
一般使用窗口函数做区分
with cte as (
select row_number() over(partition by a  order by a) cnt ,* from tb
)
delete from cte where cnt=1
------解决思路----------------------
如你在6楼所说,用开窗函数是最快也最方便的,用exists或IN  Not in的子查询反而不方便
------解决思路----------------------
删除重复记录还是要用循环,下面的 @t 要换成 Table3
while exists( select * from @t group by a,c,d having COUNT(*)>1 )
begin
    delete top (1) from @t from @t as t1 join ( select * from @t group by a,c,d having COUNT(*)>1 ) t2 
on t1.a=t2.a and t1.c=t2.c and t1.d=t2.d 
end
  相关解决方案