Supprimer inverser les doublons dans une requête SQL
Disons que le résultat d'une requête est censé renvoyer une liste de paires de chaînes (x, y). Je suis d'essayer d'éliminer l'inverse des doublons. Ce que je veux dire est que, si (x, y) est un des résultats, (y, x) ne doit pas apparaître plus tard.
exemple:
column 1 (foreign key) column 2 (int) column 3 (string)
4 50 Bob
2 70 Steve
3 50 Joe
Les personnes représentées dans ce tableau peuvent apparaître plusieurs fois avec une autre colonne 2 valeur.
Ma requête besoin d'imprimer chaque paire de noms qui ont la même colonne 2 valeur :
select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
(Bob, Bob)
(Bob, Joe)
(Joe, Bob)
(Joe, Joe)
J'ai mis à jour la requête afin qu'il supprime les doubles:
select e.column3, f.column3 from example as e, example as f where e.column2 = f.column2
and e.column3 <> f.column3
(Bob, Joe)
(Joe, Bob)
Maintenant, je veux qu'à retourner:
(Bob, Joe).
(Jean, marie) est un inverse en double, donc je ne veux pas de ça dans le résultat. Est-il de toute façon à gérer que dans une seule requête?
OriginalL'auteur Gregory-Turtle | 2012-10-24
Vous devez vous connecter pour publier un commentaire.
Tout d'abord, bienvenue 2012. Nous avons quitté concernant tables à l'aide des virgules. Il a été introduit dans la norme ANSI 89 mais est gravement défaut. Nowaways, la façon correcte est d'écrire des requêtes à l'aide de la norme ANSI 92/99/2003 syntaxe de JOINTURE.
La solution à votre problème est de transformer votre bidirectionnel inégalité
<>
dans un unidirectionnel de l'inégalité, soit<
ou>
selon ce que vous préférez.<> signifie que, compte tenu de deux éléments X et Y, X peut s'asseoir de chaque côté et Y de l'autre, de sorte que vous obtenez à la fois (X,Y) et (Y,X). Lorsque vous limitez la porte dans une seule direction, par exemple X < Y, étant donné deux éléments, seuls les "moins" de l'élément peut s'asseoir sur le côté gauche, en éliminant ainsi l'autre moitié de la paire.
OriginalL'auteur RichardTheKiwi
l'ajout d'une simple clause where devrait le faire.
Puis RichardTheKiwi la réponse est probablement ce que votre après.
OriginalL'auteur xQbert