SNA*_*SNA 5 sql sql-server duplicate-removal
在接受采访时提出的一个问题是,
一张表有100条记录.其中50个是重复的.是否可以使用单个查询从表中删除重复记录,以及选择并显示剩余的50个记录.
这可能在单个SQL查询中吗?
谢谢
SNA
使用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语法来实现此目的.