2010-04-13 5 views
0

Tenir compte de la table de DB suivant:MySQL requête compter plusieurs valeurs

c  p 
========= 
1  'a' 
1  'b' 
2  'a' 
2  'c' 

Maintenant, mon but est de récupérer une liste de numéros c, pour qui détient que chaque numéro dans cette liste a au moins un enregistrement avec p = 'a' ET p = 'b'.

Dans le tableau d'exemple ci-dessus, ce serait c = 1. Maintenant, ma question est, comment puis-je accomplir cela en utilisant une requête MySQL?

Répondre

2
select t1.c 
from MyTable t1 
inner join MyTable t2 on t1.c = t2.c 
where t1.p = 'a' and t2.p = 'b' 

Mise à jour:

select c 
from MyTable 
where p in ('a', 'b', 'c', 'd') 
group by c 
having count(distinct p) = 4 
+0

Maintenant, que se passerait-il si la question était p = 'A' et p = 'B' ET p = 'C'. Ou encore mieux, p dans aucun de ['A', 'B', 'C', ...]? – Sqlclown

+0

@Sqlclown: voir ma mise à jour – RedFilter

1

Il existe différentes façons d'attaquer le problème selon les règles de vos données suit le cas échéant. Sans en savoir plus sur votre problème, je ferais:

SELECT t1.c FROM table t1 INNER JOIN table t2 
    ON t1.c = t2.c 
    WHERE t1.p = 'a' AND t2.p = 'b' 
Questions connexes