2008-11-06 7 views
14

J'ai une base de données d'accès MS et je devrais créer une requête SQL qui me permet de sélectionner toutes les entrées non distinctes dans une colonne tout en gardant toutes les valeurs.Multiple NOT distinct

Dans ce cas, plus que jamais un exemple vaut des milliers de mots:

Tableau:

A B C 
1 x q 
2 y w 
3 y e 
4 z r 
5 z t 
6 z y 

magie SQL

Résultat:

B C 
y w 
y e 
z r 
z t 
z y 

Fondamentalement, il supprime toutes les valeurs uniques de colum n B mais conserve les lignes multiples des données conservées. Je peux "grouper par b" et ensuite "compter> 1" pour obtenir le pas distinct mais le résultat ne listera qu'une seule rangée de B et pas plus de 2 dont j'ai besoin.

Une aide?

Merci.

Répondre

26
Select B, C 
From Table 
Where B In 
    (Select B From Table 
    Group By B 
    Having Count(*) > 1) 
3
select 
    * 
from 
    my_table t1, 
    my_table t2 
where 
    t1.B = t2.B 
and 
    t1.C != t2.C 

-- apparently you need to use <> instead of != in Access 
-- Thanks, Dave! 

Quelque chose comme ça?

+0

Ceci est proche, mais vous devez utiliser <> au lieu de = dans Access!. –

+0

Um, pourquoi voudriez-vous offrir une réponse sur Jet SQL sans tester le SQL dans Access ou une forme de Jet? Pourquoi poster une réponse que vous ne savez pas fonctionnera (comme vous l'auriez découvert si vous aviez passé les 3 secondes nécessaires pour coller le SQL avec! = Dans la grille Access QBE)? –

+3

Parce que je n'utilise pas Access et que je n'ai pas d'installation disponible? Le point de mon message était que vous pouvez utiliser la même table deux fois en SQL normal (ne fonctionne probablement pas non plus dans Access, pour autant que je sache). – a2800276

1

joignez les valeurs uniques de B que vous avez déterminées avec group by b et comptez> 1 à la table d'origine pour extraire les valeurs C de la table.

7

Une autre façon de retourner les résultats que vous voulez serait ceci:

select * 
from 
    my_table 
where 
    B in 
    (select B from my_table group by B having count(*) > 1)