我有以下 SQL 表:
A|B
---
w|x
x|w
y|z
z|y
我可以构造一个将产生以下结果的查询:
A|B
---
w|x
y|z
总而言之,我想将这两列视为无序集,例如 (a,b) == (b,a)。
“最佳”代码取决于数据库,但以下与 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
您可以尝试以下方法:
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
andGREATEST
还确保w x
返回而不是x w
.