Suppression des doublons dans SQL

Muhammed Roshan:

J'ai une table qui est le même que celui ci-dessous.

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

Mais ici, je dois considérer tuples (R1, R2) et (R2, R1) en même. Ce moyen de seulement l'un parmi les tuples (R1, R2) et (R2, R1) peuvent être sous la table finale. De même, (R4, R3) et (R3, R4) est le même. Ce moyen de seulement l'un d'entre tuples (R3, R4) et (R4, R3) peuvent être sous la table finale.

Table Finale devrait ressembler à ceci.

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

Comment puis-je faire avec SQL?

Tim Biegeleisen:

Vous pouvez essayer d'utiliser une suppression avec la logique existe:

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

L'approche est ici pour supprimer toute tuple qui apparaît avec les noms dans l'ordre inverse. Le premier nom étant lexicographique plus grand que le deuxième nom est aussi une exigence.

Si vous voulez juste au lieu de voir vos données de cette façon, utilisez un moins / le plus grand tour:

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

Je suppose que tu aimes

Origine http://10.200.1.11:23101/article/api/json?id=408584&siteId=1
conseillé
Classement