如何快速删除重复数据(数据量比较大)

freetd 2010-08-03 11:35:13
有一个表1:
NS NNS
A B
B A

B C
A D
C B
A B
B E
........

要求:
(NS = NNS 同时 NNS = NS) 或NS,NNS完全重复的只保留一条记录,如蓝色字体部分和红色字体部分
得到的结果是:
NS NNS
A B 或 B A
A D
B C 或 C B
B E
因为数据量比较大(千万以上,数据都是临时生成),怎样才能快速删除重复数据
...全文
145 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
freetd 2010-08-03
  • 打赏
  • 举报
回复
在源头控制操作起来不知道怎么做,源头是这样的
有一个表T:
NS
A
B
C
D
E
...
要求表T和自己CROSS JOIN,关联后的结果就是要得到上面要求的结果,如果进行条件筛选,运行的速度无法忍受
htl258_Tony 2010-08-03
  • 打赏
  • 举报
回复
千万以上可分批删除。
htl258_Tony 2010-08-03
  • 打赏
  • 举报
回复
--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([NS] [nvarchar](10),[NNS] [nvarchar](10))
INSERT INTO [tb]
SELECT 'A','B' UNION ALL
SELECT 'B','A' UNION ALL
SELECT 'B','C' UNION ALL
SELECT 'A','D' UNION ALL
SELECT 'C','B' UNION ALL
SELECT 'A','B' UNION ALL
SELECT 'B','E'

--SELECT * FROM [tb]

-->SQL查询如下:

;WITH t AS
(
SELECT rn=ROW_NUMBER()OVER(PARTITION BY CASE WHEN NS<NNS THEN NS ELSE NNS END,CASE WHEN NS<NNS THEN NNS ELSE NS END ORDER BY @@spid),*
FROM tb
)
DELETE t WHERE rn>1

SELECT * FROM tb
/*
NS NNS
---------- ----------
A B
A D
C B
B E

(4 行受影响)
*/
永生天地 2010-08-03
  • 打赏
  • 举报
回复
上千万,还有时间要求?
百年树人 2010-08-03
  • 打赏
  • 举报
回复
要想控制重复,应该控制源头,不让插入重复数据

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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