如何删除 2 列中的镜像值

How to delete mirrored values in 2 columns

我有一个包含 2 列的 table,其中一些行包含唯一 ID 对,一些行包含作为另一行的镜像副本的对。我想删除其中一个重复项。

 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;

但是没有效果。

我对此很陌生,所以如果您能提供任何帮助,我将不胜感激。

====更新====

我接受了@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));

您可以任意决定保留 id1 < id2 所在的行,并使用 exists 子句查找它们的对应行:

DELETE FROM myable a
WHERE  id1 > id2 AND
       EXISTS (SELECT *
               FROM   mytable b
               WHERE  a.id1 = b.id2 AND a.id2 = b.id1)