如何从SQL表中删除所有重复记录?

时间:2011-06-15 04:55:18

标签: sql sql-server tsql sql-server-2005 duplicates

您好我的表名 FriendsData 包含重复记录,如下所示

fID UserID  FriendsID       IsSpecial      CreatedBy
-----------------------------------------------------------------
1   10         11            FALSE            1
2   11          5            FALSE            1
3   10         11            FALSE            1
4    5         25            FALSE            1 
5   10         11            FALSE            1
6   12         11            FALSE            1
7   11          5            FALSE            1
8   10         11            FALSE            1
9   12         11            FALSE            1

我想使用MS SQL删除重复的组合行?
从MS SQL FriendsData表中删除最新的重复记录。 这里我附上了突出重复列组合的图像。

enter image description here

如何从SQL表中删除所有重复的组合?

4 个答案:

答案 0 :(得分:11)

试试这个

DELETE
FROM FriendsData 
WHERE fID NOT IN
(
SELECT MIN(fID)
FROM FriendsData 
GROUP BY UserID, FriendsID)

请参阅here

here是更多方法来做你想做的事情

希望这有帮助

答案 1 :(得分:3)

这似乎违反直觉,但您可以从公用表表达式中删除(在某些情况下)。所以,我会这样做:

with cte as (
  select *, 
     row_number() over (partition by userid, friendsid order by fid) as [rn]
  from FriendsData
)
delete cte where [rn] <> 1

这将使记录保持最低的fid。如果您需要其他内容,请更改over子句中的order by子句。

如果是一个选项,请在表格上添加唯一性约束,这样您就不必继续这样做了。如果你仍然有泄漏,这对救助船只没有帮助!

答案 2 :(得分:1)

我不知道MS-SQL的语法是否正确,但在MySQL中,查询看起来像:

DELETE FROM FriendsData WHERE fID 
       NOT IN ( SELECT fID FROM FriendsData 
                   GROUP BY UserID, FriendsUserID, IsSpecial, CreatedBy)

GROUP BY子句中,您需要将列相同,以便考虑两个记录重复

答案 3 :(得分:0)

尝试此查询,

  select * from FriendsData f1, FriendsData f2
  Where f1.fID=f2.fID and f1.UserID  =f2.UserID  and f1.FriendsID  =f2.FriendsID

如果它返回重复的行,则将“*”替换为“删除”

将解决您的问题