单个查询以删除和显示重复记录

SNA*_*SNA 5 sql sql-server duplicate-removal

在接受采访时提出的一个问题是,

一张表有100条记录.其中50个是重复的.是否可以使用单个查询从表中删除重复记录,以及选择并显示剩余的50个记录.

这可能在单个SQL查询中吗?

谢谢

SNA

Lie*_*ers 6

使用SQL Server,你会使用这样的东西

DECLARE @Table TABLE (ID INTEGER, PossibleDuplicate INTEGER)

INSERT INTO @Table VALUES (1, 100)
INSERT INTO @Table VALUES (2, 100)
INSERT INTO @Table VALUES (3, 200)
INSERT INTO @Table VALUES (4, 200)

DELETE FROM @Table
OUTPUT Deleted.*
FROM  @Table t
      INNER JOIN (
        SELECT    ID = MAX(ID)
        FROM      @Table
        GROUP BY  PossibleDuplicate
        HAVING    COUNT(*) > 1
      ) d ON d.ID = t.ID
Run Code Online (Sandbox Code Playgroud)

OUTPUT声明显示,被删除的记录.

更新:

上面的查询将删除重复项,并为您提供已删除的行,而不是剩余的行.如果这对您很重要(总而言之,其余50行应与50个已删除的行相同),您可以使用SQL Server的2008 MERGE语法来实现此目的.