私のテーブル
ANONYMOUS
ONE TWO
1 2
2 1
1 2
3 1
今、私は1つと2つの別個のセットを選択したいと思います。私が選択したリストは
ANONYMOUS
ONE TWO
1 2
3 1
あなたの質問はあまり明確ではありませんが、私はあなたがこれを意味していると思います:
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
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