SubConsulta "AND"
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!
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!
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.
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.