【问题标题】:Removing duplicate records in SQL删除 SQL 中的重复记录
【发布时间】:2020-07-16 07:19:58
【问题描述】:

我有一张和下面一样的表。

    |----------|---------|
    |  NAME1   |  NAME2  | 
    |----------|---------|   
    |     R1   |   R2    |  
    |     R3   |   R4    |  
    |     R2   |   R1    |  
    |     R1   |   R5    |  
    |     R4   |   R3    |  
    |--------------------|

但在这里我需要将元组 (R1, R2) 和 (R2, R1) 视为相同。这意味着元组 (R1, R2) 和 (R2, R1) 中只有一个可以在决赛表中。同样,(R4,R3)和(R3,R4)也是一样的。这意味着元组 (R3, R4) 和 (R4, R3) 中只有一个可以进入决赛表。

决赛桌应该是这样的。

   |----------|---------|
   |  NAME1   |  NAME2  | 
   |----------|---------|   
   |     R1   |   R2    |  
   |     R3   |   R4    |  
   |     R1   |   R5    |  
   |--------------------|

如何使用 SQL 做到这一点?

【问题讨论】:

    标签: mysql sql database postgresql database-design


    【解决方案1】:

    您可以尝试使用存在逻辑的删除:

    DELETE
    FROM yourTable t1
    WHERE EXISTS (SELECT 1 FROM yourTable t2
                  WHERE t2.Name2 = t1.Name1 AND t2.Name1 = t1.Name2) AND
          Name1 > Name2;
    

    这里的方法是删除任何以相反顺序出现的名称的元组。第一个名字在字典上大于第二个名字也是一个要求。

    如果您只想以这种方式查看您的数据,请使用最小/最大技巧:

    SELECT DISTINCT
        LEAST(Name1, Name2) AS Name1,
        GREATEST(Name1, Name2) AS Name2
    FROM yourTable;
    

    【讨论】:

      猜你喜欢
      • 2021-02-13
      • 2016-01-07
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 2018-02-17
      相关资源
      最近更新 更多