1
私は一意のIDペアを持つ行と別の行のミラー化された複製であるペアを持つ行を含む2列のテーブルを持っています。私は重複の1つを削除したい。2列のミラーリングされた値を削除する方法
id1 | id2
-----+-----
1 | 9
2 | 10
5 | 4
6 | 16
7 | 11
8 | 12
9 | 1
10 | 2
12 | 14
14 | 8
16 | 6
ので1 | 9
ミラー9 | 1
。 1 | 9
を保ちたいが、削除するのは9 | 1
である。
私は試しました。
SELECT
id1,
id2
FROM
(
SELECT
id1, id2, ROW_NUMBER() OVER (PARTITION BY id1, id2 ORDER BY id1) AS occu
FROM
table
) t
WHERE
t.occu = 1;
しかし、それは効果がありません。
私はこれにかなり新しいので、あなたが与えることができるすべての助けが大歓迎です。
==== ==== UPDATE
私は@Mureinikからの回答を受け入れ、サブクエリでフィルタとして動作するように適応:
SELECT
*
FROM
table
WHERE
id1 NOT IN (SELECT
id1
FROM
table a
WHERE
id1 > id2
AND
EXISTS (SELECT *
FROM table b
WHERE a.id1 = b.id2 AND a.id2 = b.id1));