采访中提出的问题之一是,
一张表有100条记录。其中 50 个
是重复的。是否可以用单个
查询删除重复记录
从表中以及选择和
显示剩余 50 条记录。
这可以在单个 SQL 查询中实现吗?
Thanks
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
The OUTPUT http://technet.microsoft.com/en-us/library/ms177564.aspx语句显示被删除的记录。
Update:
上面的查询将删除重复项并为您提供已删除的行,而不是保留的行。如果这对您很重要(总而言之,剩余 50 行应与已删除的 50 行相同),您可以使用SQL Server 2008 合并 http://msdn.microsoft.com/en-us/library/bb510625.aspx语法来实现这一点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)