如何从SQL表中删除相反的行

时间:2010-02-28 08:14:06

标签: sql set unordered

我有以下SQL表:

A|B
---
w|x
x|w
y|z
z|y

我可以构造一个会产生以下结果的查询:

A|B
---
w|x
y|z

总而言之,我想将这两列视为无序集,例如(a,b)==(b,a)。

2 个答案:

答案 0 :(得分:2)

“最佳”代码取决于数据库,但以下是与dbms无关的:

SELECT      t.A,
            t.B
FROM        my_table t
LEFT JOIN   my_table t2
        ON  t.A = t2.B
        AND t.B = t2.A
        AND t.A < t.B
WHERE       t2.A IS NULL

答案 1 :(得分:1)

您可以尝试以下方法:

SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)

使用以下测试表t

CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );

INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');

它返回:

w  x
y  z

使用LEASTGREATEST还可确保返回w x而不是x w