【发布时间】:2018-12-17 10:32:11
【问题描述】:
我有一个如下所示的 SQL 表:
col1 col2
a b
b a
c d
d c
f g
如您所见,有些行 col1 和 col2 的列都被反转了。我的意思是,在第一行中,a 和 b 的值在两列中,在第 2 行中,值也在那里,但反过来。
我现在想删除每一对中的一行。我不在乎这对的哪一侧被删除。所以应该删除第 1 行和第 3 行或第 2 行和第 4 行。
结果应如下所示:
col1 col2
a b
c d
f g
或
col1 col2
b a
d c
f g
我通过以下查询实现了这一点,该查询创建了两个包含按排序顺序的值的人工列,然后应用GROUP BY,但我认为应该有一个更好看的解决方案。
DELETE t1
FROM testtable t1
INNER JOIN (
SELECT CASE WHEN col1 < col2 THEN col1 ELSE col2 END AS first,
CASE WHEN col1 < col2 THEN col2 ELSE col1 END AS second
FROM testtable
GROUP BY CASE WHEN col1 < col2 THEN col1 ELSE col2 END, CASE WHEN col1 < col2 THEN col2 ELSE col1 END
) t2 ON t2.first = t1.col1 AND t2.second = t1.col2
【问题讨论】:
标签: sql-server tsql join sql-delete