如何根据一列中的重复删除表中的行,但另一列中的差异是什么?

时间:2012-07-09 22:33:05

标签: mysql

我在桌子上有一些数据污染,我很难移除...我已经修复了污染的原因,所以它不会再发生,但我现在需要一堆记录删除,我很难搞清楚如何。

问题的性质如下。

我有一个包含userIds和groupIds的表。它对于用户存在于多个组中是有效的,因此这不是我可以通过唯一关联解决的问题。

就我而言,假设第4组和第5组是互斥的(意味着用户不能同时属于这两者)。

我需要在user_groups表上运行一个删除,我可以说(英文): 如果userID = X且组ID = 4,则删除此行。如果还有一行userID = X且groupID = 5。

我不想删除groupID = 4的所有行,只删除那些同时包含groupID = 5的行的用户。

所有帮助非常感谢。

1 个答案:

答案 0 :(得分:1)

这将删除组4中第5组中有重复的所有用户。

DELETE FROM user_groups AS G1 
WHERE G1.groupID=4 
  AND G1.userID IN (SELECT G2.userID FROM user_groups 
                    WHERE G2.userID=G1.userID AND G2.GroupID=5)