3

次の SQL テーブルがあります。

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

次の結果が得られるクエリを作成できますか?

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

要約すると、(a,b) == (b,a) のように、2 つの列を順不同のセットとして扱いたいと思います。

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)

次の 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

LEASTandを使用すると、 の代わりにGREATESTが確実にw x返されx wます。

于 2010-02-28T08:20:27.743 に答える