次の SQL テーブルがあります。
A|B
---
w|x
x|w
y|z
z|y
次の結果が得られるクエリを作成できますか?
A|B
---
w|x
y|z
要約すると、(a,b) == (b,a) のように、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
次のことを試すことができます。
SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)
次の test-table を使用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
andを使用すると、 の代わりにGREATEST
が確実にw x
返されx w
ます。