Comment supprimer des lignes opposées de la table SQL
Question
J'ai la table SQL suivante:
A|B
---
w|x
x|w
y|z
z|y
Puis-je construire une requête qui donne le résultat suivant:
A|B
---
w|x
y|z
Pour résumer, je voudrais traiter les deux colonnes comme un ensemble non ordonné, de telle sorte que (a, b) == (b, a).
La solution
"meilleur" Code dépend de la base de données, mais qui suit est dbms agnostique:
SELECT t.A,
t.B
FROM my_table t
LEFT JOIN my_table t2
ON t.A = t2.B
AND t.B = t2.A
AND t.A < t.B
WHERE t2.A IS NULL
Autres conseils
Vous pouvez essayer ce qui suit:
SELECT LEAST(a,b) a, GREATEST(a,b) b
FROM t
GROUP BY LEAST(a,b), GREATEST(a,b)
Avec la t
-table de test suivant:
CREATE TABLE t ( a VARCHAR(1), b VARCHAR(1) );
INSERT INTO t VALUES ('w','x'),('x','w'),('y','z'),('z','y');
il retourne:
w x
y z
Utilisation LEAST
et GREATEST
assure également que w x
est retourné au lieu de x w
.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow