如何删除列相同但顺序不同的行?

时间:2014-01-16 06:32:55

标签: sql sql-server-2008

假设我有一个这样的表:

+--+----+----+
|ID|Col1|Col2|
+--+----+----+
|0 |ABC |DEF |
+--+----+----+
|1 |ABC |XYZ |
+--+----+----+
|2 |XYZ |ABC |
+--+----+----+
|3 |DEF |XYZ |
+--+----+----+

我想写一个查询,它将删除所有包含在另一行中的条目的行,虽然不一定按相同的顺序。所以在这种情况下我想删除第2行,因为它包含与第1行相同的条目。因此输出应为:

+--+----+----+
|ID|Col1|Col2|
+--+----+----+
|0 |ABC |DEF |
+--+----+----+
|1 |ABC |XYZ |
+--+----+----+
|3 |DEF |XYZ |
+--+----+----+

DISTINCT的某些变体可以达到此目的吗?

到目前为止,这是我(失败)的尝试,以确定正常DISTINCT无法获取的任何交叉相似性:

DELETE FROM myTable WHERE EXISTS 
(
    SELECT 1 FROM myTable a JOIN myTable b ON a.Col1 = b.Col1 WHERE a.Col1 = b.Col2 AND a.Col2 = b.Col1
)

1 个答案:

答案 0 :(得分:0)

假设您的表中的 ID UNIQUE ..

DELETE FROM mytable
WHERE (id) IN
(SELECT B.id FROM
myTable A, myTable B
WHERE A.col1 = B.col2
  AND A.col2 = B.col1)