sql没有主键删除重复数据只保留一条,如图 ;

2024-11-04 01:07:04
推荐回答(4个)
回答(1):

1.先把数据表的去除重复的数据放到临时表中
select distinct * into #t from table --distinct 是sqlserver 里面用来去重的
2.把数据表里的数据清空
truncate table dbo.[table]
3.把临时表里的数据插入到数据表里
insert into table select * from #t
4.删除临时表
drop table #t

回答(2):

应该把数据放到一个新表里面,别的我就不知道有什么方法了
代码如下:
select item, id..,distinct id_product .... into new_table
from...

在重复的字段前面加个关键字 distinct
new_table是新表的表名,你随便写
你试试

回答(3):

你说的这个情况,比较复杂。
没有主键,那么需要判断删除重复记录时,以什么为判断字段。
仅靠 select distinct * from table1 这样是不行的,因为id_depot字段和id_product字段虽然唯一,但是其他字段(比如price字段)可不唯一啊,id_product一样会有重复。

所以如果你要求严格的话,要把所有字段的重复可能性都考虑一下再处理。
如果仅对id_depot和id_product这两个字段有要求的话,可以通过临时表来处理。
假设表名为table1,则
1、添加唯一序列号
select identity(int,1,1) as tempkey, * into temp1 from table 1
2、取出id_depot、id_product唯一的最大序列号
select id_depot, id_product, max(tempkey) as maxkey into temp2 from temp1
3、删除临时表多余数据
delete a from temp1 a where not exists (select 1 from temp2 b where a.tempkey=b.maxkey)
4、删除临时表序列号
alter table temp1 drop column tempkey
5、删除原表数据
truncate table table 1
或者delete from table1
6、插回唯一数据
insert table1 select * from temp1
7、删除临时表
drop table temp1, temp2

回答(4):

;with cte as (select *,row_number() over(partitioin by id_depot,id_product order by id_depot)rn from tb)
delete cte where rn>1