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?
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;