您好我的表名 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表中删除最新的重复记录。
这里我附上了突出重复列组合的图像。
如何从SQL表中删除所有重复的组合?
答案 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
如果它返回重复的行,则将“*”替换为“删除”
将解决您的问题