1

私のテーブル

ANONYMOUS
ONE   TWO
1      2
2      1
1      2
3      1

今、私は1つと2つの別個のセットを選択したいと思います。私が選択したリストは

ANONYMOUS
    ONE   TWO
    1      2
    3      1
4

2 に答える 2

3

あなたの質問はあまり明確ではありませんが、私はあなたがこれを意味していると思います:

SELECT DISTINCT one, two
FROM yourtable AS T1
WHERE one <= two
OR NOT EXISTS
(
     SELECT *
     FROM yourtable AS T2
     WHERE T1.one = T2.two
     AND T1.two = T2.one
)

(one, two)反転ペア(two, one)が存在しない行を検索します。両方が存在する場合は、次のようなペアを選択しone < twoます。また、値が等しい行も選択します。

オンラインで動作することを確認してください:sqlfiddle

JOIN代わりに使用したい場合は、次のようにNOT EXISTS実行できます。

SELECT DISTINCT T1.one, T1.two
FROM yourtable AS T1
LEFT JOIN yourtable AS T2
ON T1.one = T2.two
AND T1.two = T2.one
WHERE T1.one <= T1.two
OR T2.one IS NULL

オンラインで動作することを確認してください:sqlfiddle

于 2012-06-23T16:23:50.733 に答える
0
SELECT DISTINCT a.*
FROM        `ANONYMOUS` a
LEFT JOIN   `ANONYMOUS` b ON (a.one=b.two and a.two=b.one)
WHERE       b.one is null or a.one<b.one
ORDER BY    1,2
于 2012-06-23T17:43:04.390 に答える