我有以下SQL表:
A|B
---
w|x
x|w
y|z
z|y
我可以构造一个会产生以下结果的查询:
A|B
---
w|x
y|z
总而言之,我想将这两列视为无序集,例如(a,b)==(b,a)。
答案 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
使用LEAST
和GREATEST
还可确保返回w x
而不是x w
。