当前位置:  开发笔记 > 数据库 > 正文

使用临时表删除重复记录

如何解决《使用临时表删除重复记录》经验,为你挑选了1个好方法。

以下是tsql查询:

DECLARE @table TABLE(data VARCHAR(20))
INSERT INTO @table VALUES ('not duplicate row')
INSERT INTO @table VALUES ('duplicate row')    
INSERT INTO @table VALUES ('duplicate row')    
INSERT INTO @table VALUES ('second duplicate row')    
INSERT INTO @table VALUES ('second duplicate row')

SELECT   data    
INTO     #duplicates    
FROM     @table    
GROUP BY data    
HAVING   COUNT(*) > 1    

-- delete all rows that are duplicated   
DELETE   FROM @table    
FROM     @table o INNER JOIN #duplicates d
         ON d.data = o.data         

-- insert one row for every duplicate set    
INSERT   INTO @table(data)    
         SELECT   data    
         FROM     #duplicates

我理解它在做什么,但逻辑的最后一部分(在每个重复集后插入一行)没有意义.我们有一组代码--delete所有重复的行,这样就可以删除重复项,那么最后一部分是什么?

此查询在此处找到

谢谢



1> Quassnoi..:

我们有一组代码--delete所有重复的行,这样就可以删除重复项,那么最后一部分是什么?

首先,它删除所有重复的行.也就是说,所有行,原始也是.在上面的情况中,之后只有一行('not duplicate row')将保留在表中DELETE.其他所有四行都将被删除.

然后再次使用已删除的行填充表,但现在删除了重复项.

这不是删除重复项的最佳方法.

最好的方法是:

WITH q AS (
          SELECT data, ROW_NUMBER() OVER (PARTITION BY data ORDER BY data) AS rn
          FROM @table
          )
DELETE
FROM      q
WHERE     rn > 1

推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有