如何使用SQL删除重复的元组

时间:2016-01-22 05:32:14

标签: mysql sql

我有一张表如下

Col1  Col2
12    34
34    12

考虑到,这些是重复我们如何删除它们? 我尝试使用自联接来解决这个问题。但我无法得到所需的答案。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

您可以使用GREATESTLEAST来订购'您的列,然后使用distinct:

SELECT DISTINCT GREATEST(col1, col2) as first, LEAST(col1, col2) as second from yourTable

这会给你一个明显的结果。如果您要查找的内容是删除,则可以删除此结果中未包含的所有内容:

DELETE FROM yourTable where (col1, col2) NOT IN (
  SELECT DISTINCT GREATEST(col1, col2) as first, LEAST(col1, col2) as second from yourTable
)

答案 1 :(得分:1)

我假设您想要一个对称关系:例如,如果A是B的朋友,那么B也是A的朋友?我还假设两列都是外来ID和数字。如果不是这样,你将不得不适应。

最好的方法是永远不要插入两个版本;规范化关系,使较小的一个始终在Col1中,较大的一个始终在Col2中。即对于13 -> 27,您会插入[13, 27];对于27 -> 13,如果它不再出现,您将再次插入[13, 27]

如果你已经搞乱了,我可能只会这样做:

UPDATE IGNORE t
SET col1=(@temp:=col1), col1 = col2, col2 = @temp
WHERE col1 > col2;

将其标准化(没有尝试,可能有错误;同样,MySQL语法,你可能必须适应其他引擎);如果存在两个方向,则删除附加内容:

DELETE FROM t
WHERE col1 > col2;

答案 2 :(得分:0)

MySQL语法:

DELETE b 
FROM mytable a, mytable b 
WHERE a.col1 = b.col2 AND a.col2 = b.col1 AND a.col1 > b.col2;

如果两个值相同,它不起作用,但在这种情况下你有一个独特的约束来防止重复,对吗?