1

次のようなデータがあります。

 A | B
97 |556
257|803
803|257
257|323
556|97

重複した行を削除するように結果をフィルタリングする最良の方法を見つけようとしています。たとえば、行 257|803 のみが表示され、803|257 は表示されません。これを行う最良の方法は何ですか?

4

4 に答える 4

3
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)
于 2013-05-04T18:07:24.343 に答える
-2

クエリで、もう 1 つの場所条件 - leftparam<=rightparam を追加します。重複する逆のペアがすべて削除されます。80|100 は正常、100|80 は削除されました。

于 2013-05-04T10:23:03.923 に答える