3

我有以下 SQL 表:

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

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

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

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

4

2 回答 2

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
于 2010-02-28T08:27:28.237 回答
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

使用LEASTandGREATEST还确保w x返回而不是x w.

于 2010-02-28T08:20:27.743 回答