Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Consulta con tablas relacionadas

Estas en el tema de Consulta con tablas relacionadas en el foro de Mysql en Foros del Web. Tengo dos tablas relacionadas entre ellas TABLA productos id_producto hcodigo hnombre TABLA filtros_rel id_relacion id_producto id_filtro id_producto en tabla filtro_rel es clave foranea de la ...
  #1 (permalink)  
Antiguo 12/01/2015, 09:47
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 0
Consulta con tablas relacionadas

Tengo dos tablas relacionadas entre ellas

TABLA productos
id_producto
hcodigo
hnombre

TABLA filtros_rel
id_relacion
id_producto
id_filtro

id_producto en tabla filtro_rel es clave foranea de la tabla productos

Quisiera hacer una consulta para que se muestren todos los productos de la tabla productos siempre que en la tabla filtro_rel tengan un registro cuyo id_filtro sea 1 y otro registro 2

si lo pongo así me muestra todos los productos que tengan en la tabla filtro_rel id_filtro 1 o 2
Código:
SELECT *
FROM productos p LEFT JOIN filtro_rel f ON p.id_producto=f.id_producto
WHERE  f.id_filtro = '1' OR f.id_filtro = '2'
Pero si cambio OR por AND me da 0 productos aunque haya algun producto que tenga dos registros en la tabla filtro_rel (uno con id_filtro=1 y otro =2)

Código:
SELECT *
FROM productos p LEFT JOIN filtro_rel f ON p.id_producto=f.id_producto
WHERE  f.id_filtro = '1' AND f.id_filtro = '2'
  #2 (permalink)  
Antiguo 12/01/2015, 09:54
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 9 meses
Puntos: 2653
Respuesta: Consulta con tablas relacionadas

Cita:
Pero si cambio OR por AND me da 0 productos aunque haya algun producto que tenga dos registros en la tabla filtro_rel (uno con id_filtro=1 y otro =2)
Porque un mismo registro no puede tener dos valores diferentes al mismo tiempo en el mismo campo.

Código MySQL:
Ver original
  1. FROM productos p INNER JOIN filtro_rel f ON p.id_producto=f.id_producto
  2. WHERE  f.id_filtro IN(1, 2)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 12/01/2015, 10:38
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 0
Muchas gracias gnzsoloyo
La cosa es que con la consulta que me comentas me sale los mismos datos que con
Código MySQL:
Ver original
  1. SELECT * FROM productos p LEFT JOIN filtro_rel f ON p.id_producto=f.id_producto
  2. WHERE f.id_filtro = '1' OR f.id_filtro = '2'
[/CODE]

Lo que yo quisiera es que me diese todos los productos de la tabla productos siempre que en la tabla filtro_rel exista ese producto con id_filtro=1 y id_filtro=2

Realizando la consulta que me pones me muestra todos los productos de la tabla productos siempre que en la tabla filtro_rel exista ese productos con id_filtro=1 o id_filtro=2

Yo quisiera que cumpla los dos requisitos

Por ejemplo si en la tabla filtro_rel hay estos registros

id_relacion 1
id_producto 12
id_filtro 1

id_relacion 2
id_producto 12
id_filtro 2

id_relacion 3
id_producto 14
id_filtro 1

Deberia mostrarme solo el producto con id_producto=12

----------------------
En este otro caso me deberia mostrar los productos con id_producto=12 y 15 ya que ambos cumplen con el requisito de tener el id_filtro=1 y id_filtro=2

id_relacion 1
id_producto 12
id_filtro 1

id_relacion 2
id_producto 12
id_filtro 2

id_relacion 3
id_producto 14
id_filtro 1

id_relacion 4
id_producto 15
id_filtro 1

id_relacion 5
id_producto 15
id_filtro 2

id_relacion 6
id_producto 17
id_filtro 2

Última edición por gnzsoloyo; 12/01/2015 a las 11:18
  #4 (permalink)  
Antiguo 12/01/2015, 11:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.318
Antigüedad: 11 años, 9 meses
Puntos: 2653
Respuesta: Consulta con tablas relacionadas

Cita:
Lo que yo quisiera es que me diese todos los productos de la tabla productos siempre que en la tabla filtro_rel exista ese producto con id_filtro=1 y id_filtro=2
Eso es otra cosa completamente diferente, y por lo pronto requiere un agrupamiento.
Mas o menos con esto puedes comenzar:
Código MySQL:
Ver original
  1. SELECT p.* FROM productos p
  2.     INNER JOIN filtro_rel f ON p.id_producto = f.id_producto
  3. WHERE f.id_filtro IN(1, 2)
  4. GROUP BY p.id_producto
  5. HAVING COUNT(*) = 2;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 13/01/2015, 05:22
 
Fecha de Ingreso: junio-2005
Mensajes: 69
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Consulta con tablas relacionadas

Perfecto. De gran ayuda.

Etiquetas: join, registro, relacionadas, select, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:57.