次のようなデータがあります。
A | B
97 |556
257|803
803|257
257|323
556|97
重複した行を削除するように結果をフィルタリングする最良の方法を見つけようとしています。たとえば、行 257|803 のみが表示され、803|257 は表示されません。これを行う最良の方法は何ですか?
次のようなデータがあります。
A | B
97 |556
257|803
803|257
257|323
556|97
重複した行を削除するように結果をフィルタリングする最良の方法を見つけようとしています。たとえば、行 257|803 のみが表示され、803|257 は表示されません。これを行う最良の方法は何ですか?
SELECT *
FROM T x
WHERE x.A < x.B
OR NOT EXISTS (
SELECT *
FROM T y
WHERE y.A = x.B AND y.B = x.A
);
この奇妙な状態の真理値表:
A | B | (A<B) | (NOT exists) | (A<B OR NOT exists)
---+----+-------+--------------+----------------------
97 |556 | True | False | True
257|803 | True | False | True
803|257 | False | False | False
257|323 | True | True | True
556|97 | False | False | False
結果:
a | b
-----+-----
97 | 556
257 | 803
257 | 323
(3 rows)
クエリで、もう 1 つの場所条件 - leftparam<=rightparam を追加します。重複する逆のペアがすべて削除されます。80|100 は正常、100|80 は削除されました。