【问题标题】:How to check for duplicate rows (a,b) ~ (b,a) in postgreSQL如何在 postgreSQL 中检查重复行 (a,b) ~ (b,a)
【发布时间】:2015-08-03 20:06:22
【问题描述】:

假设我有两个表(ids1、ids2 分别带​​有列标题 id1、id2)

+-----+----+  
| id1 | id2|  
+-----+----+  
| 1 | 3  |  
| 2 | 4  |  
| 3 | 1  |  
| 4 | 2  |   
| 5 | 0  |   
+--------+  

如何删除 (a,b) ~ (b,a) 行以便我得到 ​​p>

+-----+----+  
| id1 | id2|  
+-----+----+  
| 1 | 3  |  
| 2 | 4  |  
| 5 | 0  |    
-----------+ 

无论我得到 (1,3) (2,4)、(3,1) (4,2) 还是两者的组合都没有关系。

我正在使用 postgreSQL-9.2。

【问题讨论】:

    标签: postgresql postgresql-9.2


    【解决方案1】:
    SELECT LEAST(id1,id2),GREATEST(id1,id2) FROM t
    GROUP by
    GREATEST(id1,id2),LEAST(id1,id2)
    

    FIDDLE

    【讨论】:

      【解决方案2】:

      这可能不是最优雅的解决方案,但它会起作用:

      DELETE FROM foo
      WHERE (id1, id2) in (
      SELECT f1.id1, f1.id2
          FROM foo f1
          JOIN foo f2 ON (
              f1.id1 = f2.id2 AND
              f1.id2 = f2.id1 AND
              (f1.id1, f1.id2) > (f2.id1, f2.id2))
      );
      

      连接中的大于条件确保不会删除两个匹配的行。

      【讨论】:

        猜你喜欢
        • 2016-02-23
        • 2011-10-20
        • 2013-11-07
        • 2021-10-06
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2017-07-03
        • 1970-01-01
        相关资源
        最近更新 更多