如果一张表中有重复的编码如何查找出来并删除?

时间:2022-05-24 19:53:27
如果一张表中有重复的编码如何查找出来并删除?

19 个解决方案

#1


表结构呢?

#2


重复的编码..? LZ请贴表结构和数据...

#3


delete from 表 where 编码 in (select 编码 from 表 group by 编码 having count(*)>=2)

#4


delete from 表 where 编码 in (select 编码 from 表 group by 编码 having count(*)>=2)

把相同的都给删了~~

#5


用一个while循环
while (exists(select Top 1 编码 from 表 group by 编码 having count(*)>=2))
Begin
delete from 表 where 编码 in (select Top 1 编码 from 表 group by 编码 having count(*)>=2)
End

只删除重复的编号重复的重复项:),

#6


表结构(编码,名称,库存)其中编码有重复的行,现在想把重复的删除,只留下最上面的一条

#7


刪除1筆得話,cjer() 這個就行

#8


先distict然后全删除 再把distic的表更新原来的就行了

#9


只留下最上面的一条,select Top 1 编码 from 表  group by 编码 having count(*)>=2 order by 编码 desc 在后头加个order by

#10


select distinct * into #tmp from table

delete from table

insert into table select * from #tmp

#11


select distinct * into #tmp from table

delete from table

insert into table select * from #tmp
是不行的,它编号相同,可其他值可能相同,所以还是会有编号相同的

#12


上面的几个直接delete方法都会把重复项目全部删除,一个都不剩的。

#13


面試時遇到過這樣問題,他要求我用一條SQL語句解決

我是用臨時表保存原表的DISTINCT數據,刪除原表的數據,再把臨時表的數據插入原表中

然後我被人說了一頓,說我沒有按要求做,到現在我還想不出如何用一條SQL語句搞定

#14


cjer() 的方法是不行的,重复的行全部删除

#15


楼主的表中编号重复的记录是否内容完全一样(其他字段也一样)?
如果是:先distinct到另一个表,清空原表,从另一个表把记录插回去就可以了,如果要如楼上说的用一句sql来完成,那我就不懂了。
如果否:也就是说编号相同但内容不同,那么就奇怪了,能只保留一条而删掉其他吗?其他的真的对业务没用了吗?谁知道要留下哪一条才是有用的?如果一定要这么做,那就用游标逐行扫重复编号的记录,逐条把他们删除掉。

#16


根据cjer() 的改下

--插入一个标识列
alter table 表
add ID int identity(1,1)

--删除含重复编码的行,保留ID最上面的
delete from 表
where ID in(
select ID from 表
where 编码 in
(select 编码 from 表 group by 编码 having count(*)>=2)
)
and ID not in 
(
select ID from 表
where 编码 in
(select Top 1 编码 from 表 group by 编码 having count(*)>=2)
)

--删除ID列
alter tabe 表
drop column ID

#17


有没有简单点,一句SQL能搞定的?重复的编码是完全一样的,只是其他列不一样。

#18


你的情况是 总提示"键列信息不足或不正确,更新影响到多行吗?

如果是可以这样:

假设你有2条重复的数据,删除其中一条可以用
set rowcount 1
delete where...
set rowcount 0
这样2条只会删除一条。

set rowcount x的用法可以查查bookonline

#19


删除同样数据行。同样的数据行,又没有主键的情况下,比如:更新,删除字段,服务器无法判断这两行是哪一行。所以出错。可以用上面的语句删除重复行。

#1


表结构呢?

#2


重复的编码..? LZ请贴表结构和数据...

#3


delete from 表 where 编码 in (select 编码 from 表 group by 编码 having count(*)>=2)

#4


delete from 表 where 编码 in (select 编码 from 表 group by 编码 having count(*)>=2)

把相同的都给删了~~

#5


用一个while循环
while (exists(select Top 1 编码 from 表 group by 编码 having count(*)>=2))
Begin
delete from 表 where 编码 in (select Top 1 编码 from 表 group by 编码 having count(*)>=2)
End

只删除重复的编号重复的重复项:),

#6


表结构(编码,名称,库存)其中编码有重复的行,现在想把重复的删除,只留下最上面的一条

#7


刪除1筆得話,cjer() 這個就行

#8


先distict然后全删除 再把distic的表更新原来的就行了

#9


只留下最上面的一条,select Top 1 编码 from 表  group by 编码 having count(*)>=2 order by 编码 desc 在后头加个order by

#10


select distinct * into #tmp from table

delete from table

insert into table select * from #tmp

#11


select distinct * into #tmp from table

delete from table

insert into table select * from #tmp
是不行的,它编号相同,可其他值可能相同,所以还是会有编号相同的

#12


上面的几个直接delete方法都会把重复项目全部删除,一个都不剩的。

#13


面試時遇到過這樣問題,他要求我用一條SQL語句解決

我是用臨時表保存原表的DISTINCT數據,刪除原表的數據,再把臨時表的數據插入原表中

然後我被人說了一頓,說我沒有按要求做,到現在我還想不出如何用一條SQL語句搞定

#14


cjer() 的方法是不行的,重复的行全部删除

#15


楼主的表中编号重复的记录是否内容完全一样(其他字段也一样)?
如果是:先distinct到另一个表,清空原表,从另一个表把记录插回去就可以了,如果要如楼上说的用一句sql来完成,那我就不懂了。
如果否:也就是说编号相同但内容不同,那么就奇怪了,能只保留一条而删掉其他吗?其他的真的对业务没用了吗?谁知道要留下哪一条才是有用的?如果一定要这么做,那就用游标逐行扫重复编号的记录,逐条把他们删除掉。

#16


根据cjer() 的改下

--插入一个标识列
alter table 表
add ID int identity(1,1)

--删除含重复编码的行,保留ID最上面的
delete from 表
where ID in(
select ID from 表
where 编码 in
(select 编码 from 表 group by 编码 having count(*)>=2)
)
and ID not in 
(
select ID from 表
where 编码 in
(select Top 1 编码 from 表 group by 编码 having count(*)>=2)
)

--删除ID列
alter tabe 表
drop column ID

#17


有没有简单点,一句SQL能搞定的?重复的编码是完全一样的,只是其他列不一样。

#18


你的情况是 总提示"键列信息不足或不正确,更新影响到多行吗?

如果是可以这样:

假设你有2条重复的数据,删除其中一条可以用
set rowcount 1
delete where...
set rowcount 0
这样2条只会删除一条。

set rowcount x的用法可以查查bookonline

#19


删除同样数据行。同样的数据行,又没有主键的情况下,比如:更新,删除字段,服务器无法判断这两行是哪一行。所以出错。可以用上面的语句删除重复行。

#20