Bases de Datos - consulta In pero que compruebe todos

   
Vista:

consulta In pero que compruebe todos

Publicado por Cribelo (3 intervenciones) el 02/09/2014 15:32:26
Hola, tengo una duda que no se como solucionar. Como todos saben la consulta in devuelve la tupla si aparece algun id: ejemplo:
select id_persona from persona per where per.id_persona in (2,5,6)
si per.idPersona aparece una sola vez en la subconsulta, ya me lo va a devolver, lo que yo necesito es que existan todos los registros, osea:
tabla personas
idPersona nombre
1 jose
2 pedro
3 marua

tabla personas_productos
idPersona idProducto
1 2
1 5
1 6
2 5

Mi consulta me tendria que devolver la persona idPersona = 1, porque estan los tres idProducto, y no el idPersona 2, porque solo aparece el idProducto2, espero se entienda. gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Oscar

consulta In pero que compruebe todos

Publicado por Oscar (1 intervención) el 02/09/2014 16:12:02
Quizas sea un poco atacar a lo bruto pero has probado:

SELECT distinct(a.id_persona)
FROM (personas_productos a INNER JOIN personas_productos b ON a.id_persona=b.idpersona) INNER JOIN personas_productos c ON a.id_persona=c.id_persona
WHERE a.id_producto = 2 and b.id_producto = 5 and c.id_producto = 6
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta In pero que compruebe todos

Publicado por Cribelo (3 intervenciones) el 03/09/2014 14:10:41
El tema es que los ids son dinamicos, ahi puse 3 por dar un ejemplo, tiene que haber otra solucion.
Sigo buscando..graciasss
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta In pero que compruebe todos

Publicado por Rafael (33 intervenciones) el 03/09/2014 14:23:07
Hola:

Prueba con algo parecido a esto y nos cuentas

1
2
3
4
5
SELECT  id_persona
FROM    personas_productos
WHERE   id_producto in (2,5,6)
GROUP   BY id_persona
HAVING  count(distinct i_producto) = 3

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta In pero que compruebe todos

Publicado por Cribelo (3 intervenciones) el 03/09/2014 16:47:08
La consulta esa funciona, gracias,pero en mi caso no aplica, lo que sucede es que yo acote mi consulta para hacerlo mas facil, pero tiene muchos campos despues del select, muchos, muchos inner joins y por eso me dice q el group by no funciona porque los campos del select no estan incluidos en la clausula group by, son demasiados, 40 por darte un numero, no se si da para ponerlos todos en el group by... No se si se entiende. Sigo buscando. gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta In pero que compruebe todos

Publicado por Rafael (33 intervenciones) el 03/09/2014 17:29:11
Pues creo que es simple pero no cuento con toda la información para ayudarte solo se me ocurre algo asi:

1
2
3
4
5
6
7
8
SELECT *
FROM personas
WHERE id_persona IN (
     SELECT id_persona
     FROM personas_productos
     WHERE id_producto in (2,5,6)
     GROUP BY id_persona
     HAVING count(distinct i_producto) = 3)
Prueba y me cuentas o si me dices cual es tu consulta igual pueda ayudarte mejor....

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

consulta In pero que compruebe todos

Publicado por Alixandro (18 intervenciones) el 10/09/2014 01:39:04
Cribelo. Favor colocar el código que tienes hecho para verlo así ver donde te falla la lógica que estas buscando.

No se si así. Pero los que entiendo es que quieres mostrar todas las personas que tienen productos si es así prueba esta consulta.

Select per.id, per.nombre, pro.producto
From personas per,
Persona_productod pro
Where pro.id = per.id
and....
and ....
order by 1,3
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar