SQL - Problemas en una consulta con tablas relacionadas

 
Vista:

Problemas en una consulta con tablas relacionadas

Publicado por Pablo (4 intervenciones) el 08/05/2018 10:50:06
Buenas a tod@s,

No soy experto en SQL y tengo el siguiente problema... dispongo de dos tablas "relacionadas", una de productos y otra de caracteristicas de productos en las que guardo valores que pueden tener esos productos, por ejemplo: colores, materiales, tamaños, etc...

Lo que estoy haciendo es un filtro que me saque productos según las caracteristicas seleccionadas pero tengo el problema a la hora de sacar los resultados con la siguiente sentencia:
1
2
3
4
5
6
7
8
9
10
11
SELECT
	productos.ref,productos.nombre,caracteristicas.ref,caracteristicas.idvalor
FROM productos
LEFT JOIN
	caracteristicas ON (caracteristicas.ref=productos.ref)
 
WHERE
	(caracteristicas.idvalor = 384 OR caracteristicas.idvalor = 379 ) and
	(caracteristicas.idvalor = 377)
ORDER BY
	productos.nombre ASC

Antes lo tenia todo con un IN al estilo... caracteristicas.idvalor IN (384,379,377) lo que no quiero que saque los productos que tengan esas caracteristicas, sino que la consulta sea...

Productos que tengan 384 ó 379 y además tengan 377.

no se si me explico?

La consulta no da error, pero no me devuelve resultados habiendo registros que cumplen esas condiciones.

Alguna ayuda?

Gracias de antemano.
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

Problemas en una consulta con tablas relacionadas

Publicado por Ana (11 intervenciones) el 08/05/2018 16:14:26
Hola,

Los productos que tengan 384 ó 379 y además tengan 377, ¿en tabla y campo se encuentran?

Si en el FROM, utilizas LEFT JOIN, te va a coger todos, pero si pones INNER JOIN, solo te va a coger solo los que están relaccionados.

Un saludo

Ana
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

Problemas en una consulta con tablas relacionadas

Publicado por Pablo (4 intervenciones) el 08/05/2018 16:20:13
Si, el tema es que muestre todos los que tengan esas caracteristicas, por ejemplo:

384= rojo
379= negro

377= madera

Quiero sacar de los productos todos aquellos que sean de madera en colores rojo y negro.
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

Problemas en una consulta con tablas relacionadas

Publicado por Ana (11 intervenciones) el 08/05/2018 16:23:32
Prueba a poner:

1
2
3
4
5
6
7
8
9
10
11
SELECT
	productos.ref,productos.nombre,caracteristicas.ref,caracteristicas.idvalor
FROM productos
INNER JOIN
	caracteristicas ON (caracteristicas.ref=productos.ref)
 
WHERE
         productos.ref IN (384, 379, 377)
 
ORDER BY
	productos.nombre ASC

Un saludo
Ana
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

Problemas en una consulta con tablas relacionadas

Publicado por Pablo (4 intervenciones) el 08/05/2018 16:26:34
Pero ahi solo me sacara los que contengan esas tres caracteristicas no?

Yo lo que quiero sacar las referencias que tienen (384 y 377) ó (379 y 377)
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
sin imagen de perfil
Val: 22
Ha aumentado su posición en 3 puestos en SQL (en relación al último mes)
Gráfica de SQL

Problemas en una consulta con tablas relacionadas

Publicado por Ana (11 intervenciones) el 08/05/2018 16:28:22
Aaaahhh, vale.

Prueba con esto:
1
2
WHERE
productos.ref IN (384, 377) OR productos.ref IN (379, 377)

O bien hacer un UNION ALL con las tablas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT
productos.ref,productos.nombre,caracteristicas.ref,caracteristicas.idvalor
FROM productos
INNER JOIN
caracteristicas ON (caracteristicas.ref=productos.ref)
 
WHERE
productos.ref IN (384, 377)
 
UNION ALL
 
SELECT
productos.ref,productos.nombre,caracteristicas.ref,caracteristicas.idvalor
FROM productos
INNER JOIN
caracteristicas ON (caracteristicas.ref=productos.ref)
 
WHERE
productos.ref IN (379, 377)



Pruebalo.



Un saludo
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

Problemas en una consulta con tablas relacionadas

Publicado por Pablo (4 intervenciones) el 08/05/2018 16:34:24
Si, asi es como lo tenia antes.

El tema es que no quiero que contenga las tres caracteristicas, sino dos de ellas.... las que haya seleccionado el usuario.
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
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Problemas en una consulta con tablas relacionadas

Publicado por leonardo_josue (1173 intervenciones) el 08/05/2018 16:51:06
Hola Pablo:

1
La consulta no da error, pero no me devuelve resultados habiendo registros que cumplen esas condiciones.

Si la consulta no te da error, entonces el problema es de lógica, pero para saber cual es el problema debemos primero conocer tu modelo y tus datos.

Podrías poner por separado la estructura de tus tablas y poner algunos de datos de ejemplo de cada una de ellas. A partir de esos datos dinos qué es lo que estás obteniendo como salida y qué es lo que debería de salir, es decir, que está mal con la consulta. De esta manera podremos indicarte alguna otra alternativa para resolver tu problema.

Saludos
Leo.
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