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

Subconsulta "AND"

Estas en el tema de Subconsulta "AND" en el foro de SQL Server en Foros del Web. Hola que tal, Espero alguien me pueda ayudar. Tengo dos tablas: _Tabla1 : Productos _Tabla2 : Atributos de los productos Tengo la siguiente consulta: @import ...
  #1 (permalink)  
Antiguo 29/01/2010, 17:13
 
Fecha de Ingreso: octubre-2004
Mensajes: 55
Antigüedad: 19 años, 6 meses
Puntos: 0
Pregunta Subconsulta "AND"

Hola que tal,

Espero alguien me pueda ayudar. Tengo dos tablas:

_Tabla1: Productos
_Tabla2: Atributos de los productos

Tengo la siguiente consulta:

Código SQL:
Ver original
  1. 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.

Ojalá alguien me pueda orientar.

Saludos!

--
Guillermo Rendón
Web & Desktop Developer
  #2 (permalink)  
Antiguo 29/01/2010, 17:41
 
Fecha de Ingreso: agosto-2006
Mensajes: 179
Antigüedad: 17 años, 8 meses
Puntos: 0
De acuerdo Respuesta: Subconsulta "AND"

La consulta que tienes nunca va a arrojar algun registro dado que un campo no tiene dos valores al mismo tiempo, intentelo de la siguiente manera y veras que asi si funciona:

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') )

Aunque te aconsejo que hagas mejor un JOIN entre las tablas en vez de una subconsulta, verás que es mucho mas rápida.

Espero te sirva.

Saludos!!!
  #3 (permalink)  
Antiguo 29/01/2010, 17:59
 
Fecha de Ingreso: octubre-2004
Mensajes: 55
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Subconsulta "AND"

Gracias por tu respuesta, lo intentaré, 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, cual sería su equivalente con JOIN?

Muchas gracias nuevamente.

Saludos!
  #4 (permalink)  
Antiguo 30/01/2010, 20:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 55
Antigüedad: 19 años, 6 meses
Puntos: 0
Respuesta: Subconsulta "AND"

Algún MASTER de SQL Server por ahi... ?
  #5 (permalink)  
Antiguo 01/02/2010, 17:00
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Subconsulta "AND"

Prueba asi:
Código SQL:
Ver original
  1. SELECT *
  2. FROM _Tabla1 T1
  3. WHERE EXISTS (
  4.     SELECT 1
  5.     FROM _Tabla2 T2
  6.     WHERE T1.prod_ID = T2.atrA_ProdID AND atrA_Nombre='Bluetooth' AND atrA_Valor='Si'
  7. )
  8. AND EXISTS (
  9.     SELECT 1
  10.     FROM _Tabla2 T2
  11.     WHERE T1.prod_ID = T2.atrA_ProdID AND atrA_Nombre='Color' AND atrA_Valor='Negro'
  12. )
Si no es optima o no funciona esta consulta, muestranos datos de ambas tablas.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #6 (permalink)  
Antiguo 02/02/2010, 04:21
 
Fecha de Ingreso: enero-2010
Ubicación: Sevilla
Mensajes: 202
Antigüedad: 14 años, 2 meses
Puntos: 5
Respuesta: Subconsulta "AND"

Te recomiendo que no utilices subconsultas si puedes evitarlo, porque degradan el rendimiento, particularmente los operadores IN y NOT IN (este es el peor de todos).

La solución es hacer una consulta con un JOIN entre las dos tablas.

Si me envías (o la pegas aquí) la definción de las dos tablas te devuelvo la consulta hecha.

Saludos.
  #7 (permalink)  
Antiguo 02/02/2010, 11:51
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Subconsulta "AND"

Yo voy con la propuesta de FLAVIOVICH, es mucho mejor el EXISTS

Etiquetas: subconsulta
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




La zona horaria es GMT -6. Ahora son las 21:16.