删除 SQL 中的重复记录

Removing duplicate records in SQL

我有一个 table 与下面相同。

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

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

结局table应该是这样的。

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

如何使用 SQL 执行此操作?

您可以尝试使用具有现有逻辑的删除:

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

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

如果您只想查看您的数据,请使用least/greatest技巧:

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