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).

Était-ce utile?

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
scroll top