用于删除具有相同值集的行的SQL

我有一个这样的表:

ID, ItemsID
1   2                                                                       
1   3     
1   4   
2   3  
2   4  
2   2

我想删除像ID = 2这样的元组,因为在我的情况下2,3,4与3,4,2相同.

我怎么能用SQL做到这一点?

最佳答案 对不起,我没有及时看到Oracle标签.但是,我将保留MySQL解决方案以供参考.
Apparently在某些Oracle版本中有类似GROUP_CONCAT()的东西.

它可能不是最优雅的解决方案,但这将完成这项工作:

DELETE FROM t WHERE ID IN (
  SELECT ID
  FROM (SELECT ID, GROUP_CONCAT(ItemsID ORDER BY ItemsID) AS tuple FROM t GROUP BY ID) AS tuples
  WHERE EXISTS (
    SELECT TRUE
    FROM (SELECT ID, GROUP_CONCAT(ItemsID ORDER BY ItemsID) AS tuple FROM t GROUP BY ID) tuples2
    WHERE tuples2.tuple = tuples.tuple
    AND tuples2.ID < tuples.ID
  )
)

SQLfiddle

您可能想要调整group_concat_max_len.

点赞