2012-04-29 14 views
7

Teniendo en cuenta la tabla de ejemplo a continuación:de consultas SQL para un escenario particular

Profile_ID Child_ID 

1   1 
1   2 
1   3 

2   1 
2   2 

3   1 
3   2 
3   3 
3   5 

Quiero construir una consulta SQL que me da los identificadores de perfil que son aplicables a los niños de 1 y 2 y 3 ... esto implica ese profile_ID 2 no estará en el resultado ya que el perfil 2 solo se aplica a los niños 1 y 2 ... pero espero que el perfil 3 esté incluido.

Mi idea es algo similar a esto

SELECT Profile_ID 
FROM table 
WHERE Child_ID IN (1 AND 2 AND 3) 

Ahora, soy muy consciente de que IN sirve como una función OR ... ¿Hay una manera similar a lograr una funcionalidad similar a la cláusula IN con una AND en lugar de OR?

Gracias de antemano por toda su ayuda.

+2

muy buena pregunta! situación interesante! – test

Respuesta

7

Prueba esto:

select profile_id from t 
where child_id in (1, 2 ,3) 
group by profile_id 
having count(distinct child_id) = 3 

Aquí es el fiddle para jugar.

NOTA: asegúrese de que 3 coincida con la cantidad de elementos en la cláusula in.

+0

en lugar de group by profile_id, ¿es posible cambiar la declaración de selección para seleccionar distinct_id_perfil? – test

+1

@test No. No me estoy agrupando para obtener profile_id distinto, sino para poder contar el grupo resultante. Una cláusula distinta no me permitirá hacer eso. –

+1

gracias mi amigo – test

Cuestiones relacionadas