sql中删除完全多字段重复的数据,只保留一条

野鼻孔 2016-09-19 12:27:24
Hi,各位大神

有个问题一直困扰我好些时候了。


test1 test2 test3 test4
1 2 3 4
1 2 3 4
5 6 7 8
5 6 7 8

如上面为一个表中的重复数据,表名为Table_1.
目前我想直接在Table_1删除重复数据,只留一条,请问如何操作?
因为这张表里没有ID列,并不能通过对比ID大小来保存哪条大哪条小。所有重复的行的字段完全一模一样。

当然select distinct可以读取重复数据,只显示一条,不过没啥用。

求帮助
...全文
9248 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
不是宇宙浪子 2017-09-04
  • 打赏
  • 举报
回复
ORACLE : DELETE a FROM Table_1 a,Table_1 b WHERE a.test1=b.test1 AND a.test2=b.test2 AND a.test3=b.test3 AND a.test4=b.test4 AND a.rowid < b.rowid;
  • 打赏
  • 举报
回复
最后 drop 是什么意思 drop完以后 表都没有了不是吗
hulahula2017 2017-06-30
  • 打赏
  • 举报
回复
学习学习
中国风 2016-09-19
  • 打赏
  • 举报
回复
用你distinct 也行 这样用
--生成新表
SELECT DISTINCT *  INTO NewTableName FROM TableName

--删除旧表
DROP TABLE TableName
--重命名表
EXEC sys.sp_rename @objname = N'NewTableName', -- nvarchar(1035)
    @newname = 'TableName' -- sysname
中国风 2016-09-19
  • 打赏
  • 举报
回复
DELETE t FROM (SELECT *,ROW_NUMBER()OVER(PARTITION BY test1,test2,test3,test4 ORDER BY RAND()) AS RN FROM TableName) AS t WHERE RN>1
生成伪列去删除
红柚皮 2016-09-19
  • 打赏
  • 举报
回复
学习学习
卖水果的net 版主 2016-09-19
  • 打赏
  • 举报
回复

-- partition by 后面不能写 text varbinary 这些数据类型
create table test(a int, b int, c int, d int)
go
insert into test values
(1,	2,	3,	4),
(1,	2,	3,	4),
(5,	6,	7,	8),
(5,	6,	7,	8)
go
with m as (
select 
    *, 
    row_number() over(partition by a,b,c,d order by a) rn
from test 
)
delete m where rn > 1
go
select * from test 
go
drop table test 
go



(2 行受影响)
a           b           c           d
----------- ----------- ----------- -----------
1           2           3           4
5           6           7           8

(2 行受影响)


34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧