SubConsulta "AND"

Rugal
27 de Febrero del 2010
Hola que tal,

Espero alguien me pueda ayudar. Tengo dos tablas:

_Tabla1: Productos
_Tabla2: Atributos de los productos

Tengo la siguiente consulta:

SELECT * FROM _Tabla1 WHERE prod_ID IN (SELECT atrA_ProdID FROM _Tabla2 WHERE (atrA_Nombre='Bluetooth' AND atrA_Valor='Si') AND (atrA_Nombre='Color' AND atrA_Valor='Negro'))

Esta consulta NO me arroja ningún resultado, siendo que existe al menos un producto con 'Bluetooth' y en color 'Negro', deberia arrojar los datos de ese producto que tiene 'Bluetooth' y es de color negro. Importante: no pretendo utilizar el operador "OR", necesito utilizar "AND" para que obtener solo resultados donde AMBAS caracteristicas sean parte de ese producto.

La relación que utilizo entre las tablas es el ID del producto (en _Talba1 es prod_ID y en _Tabla2 es atrA_ProdID). La relación está correcta y tal vez algo me esté fallando en la consulta, tal vez exista alguna otra forma más eficiente para hacerla.

En otro Foro me recomendaron usar OR (dado que un campo no tiene dos valores al mismo tiempo) en lugar de AND, de la siguiente forma:

SELECT * FROM _Tabla1 WHERE prod_ID IN (SELECT atrA_ProdID FROM _Tabla2 WHERE (atrA_Nombre='Bluetooth' AND atrA_Valor='Si') OR (atrA_Nombre='Color' AND atrA_Valor='N') )

Lo intenté, aunque precisamente lo que necesito es mostrar sólo los productos que cumplan con todas las caracteristicas, es decir, en este caso, solo los que tengan Bluetooth y sean tambien de color negro, y no que tengan alguna de ellas, por ejemplo que tenga Bluetooth pero sea de otro color, estos últimos resultados no me servirian.

¿Cómo podría lograr esto? Me podrias poner un ejemplo?

Volviendo a la consulta original, cómo puedo hacerlo con JOIN, si es que funciona mejor con JOIN?

Ojalá alguien me pueda orientar.

Saludos!

Ignacio Far?
27 de Febrero del 2010
En la tabla1 de Producto debes de tener un campo que sea la clave del producto y en la tabla2 de Atributos de productos otro campo que indique la clave del producto, por lo tanto ese campo se puede usar para hacer la union (JOIN) ejemplo:

SELECT * FROM TABLA1 INNER JOIN TABLA2 ON
TABLA1.CLAVE_PRODUCTO = TABLA2.CLAVE_PRODUCTO

donde CLAVE_PRODUCTO es el punto de union (JOIN) entre amabas tablas.