我有一张和下面一样的桌子。
    |----------|---------|
    |  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来做到这一点呢?
发布于 2020-04-04 03:40:26
您可以尝试使用带有现有逻辑的delete:
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;https://stackoverflow.com/questions/61023449
复制相似问题