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

Problema con Select

Estas en el tema de Problema con Select en el foro de SQL Server en Foros del Web. Hola Amigos, estoy totalmente "atascado con esta consulta". Les cuento cual es el problema Escenario: Tabla 1 - Clientes cod_client, razon_soc, cumpleanio, dir_com, domicilio, e_mail, ...
  #1 (permalink)  
Antiguo 18/05/2012, 07:24
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 13 años, 6 meses
Puntos: 0
Pregunta Problema con Select

Hola Amigos,
estoy totalmente "atascado con esta consulta".
Les cuento cual es el problema

Escenario:
Tabla 1 - Clientes
cod_client, razon_soc, cumpleanio, dir_com, domicilio, e_mail, telefono_1

Tabla 2 - Facturas
nro_factura, importe, fecha_emis, cod_client, tipo_comp

Yo necesito un listado de los clientes que no me compran desde el 2012-01-31 para atras.
Para eso yo pense en agarrar todos mis clientes que tienen facturas > 2012-02-01 y quitarlos del listado con la siguiente consulta:

select a.razon_soc, a.cumpleanio sa cumple, a.e_mail, a.telefono_1
from Clientes as a inner join Facturas as b on (a.cod_client=b.cod_client and b.fecha_emis < '2012-02-01')
inner join ( select c.cod_client from Facturas as c where c.fecha_emis > '2012-01-31') clientes on a.cod_client != clientes.cod_client
group by a.razon_soc, a.cumpleanio sa cumple, a.e_mail, a.telefono_1;


Pero me da clientes que tienen compras/factutas despues del 01 de febrero.
Y no me puedo dar cuenta en donde esta el error.
Obviamente el error soy YO! pero, si me pueden dar alguna idea...


Gracias Gustavo
  #2 (permalink)  
Antiguo 18/05/2012, 16:53
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problema con Select

Hola Gustavo, proba con esta consulta a ver si te sirve:

Código SQL:
Ver original
  1. SELECT cli.cod_client
  2. FROM cliente cli, facturas fac
  3. WHERE cli.cod_client = fac.cod_client AND cli.cod_client NOT IN (SELECT c.cod_client FROM clientes c, facturas f
  4.               WHERE c.cod_client = f.cod_client AND f.fecha_emis <= '2012-01-31')

Saludos!

Última edición por damimg; 18/05/2012 a las 16:58
  #3 (permalink)  
Antiguo 19/05/2012, 05:22
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema con Select

damimg, gracias por todo.
Creo que funciona de maravillas.

lo voy probando.....
:D
  #4 (permalink)  
Antiguo 20/05/2012, 10:40
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: Problema con Select

Solo cambia el NOT IN, que ya lo hemos dicho hasta el cansancio, por el NOT EXISTS
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 20/05/2012, 13:07
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problema con Select

Cita:
Iniciado por iislas Ver Mensaje
Solo cambia el NOT IN, que ya lo hemos dicho hasta el cansancio, por el NOT EXISTS
iislas, cual es el motivo del cambio?? con not exists no se me ocurre como hacerlo.... ya que solo el where evalua el resultado del mismo 0 filas o mas de 1, y no devolveria un conjunto de valores sobre los cuales comparar con los clientes previamente joineados.

Espero tu solucion

Saludos
  #6 (permalink)  
Antiguo 21/05/2012, 10:18
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: Problema con Select

La solucion ya se ha publicado en este foro.


SELECT * FROM tabla1 t1 WHERE NOT EXISTS(SELECT * FROM tabla2 t2 WHERE t1.id = t2.id)
__________________
MCTS Isaias Islas
  #7 (permalink)  
Antiguo 24/05/2012, 05:30
 
Fecha de Ingreso: octubre-2010
Ubicación: Palermo
Mensajes: 55
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Problema con Select

ok muchas gracias, va el cambio.
:)
  #8 (permalink)  
Antiguo 24/05/2012, 09:05
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: Problema con Select

damimg

Existe una RAZON muy poderosa y es TIEMPO DE RESPUESTA, el NOT IN, se debe dejar como ultima opcion.
__________________
MCTS Isaias Islas
  #9 (permalink)  
Antiguo 24/05/2012, 10:34
 
Fecha de Ingreso: abril-2012
Ubicación: Capital Federal
Mensajes: 283
Antigüedad: 12 años
Puntos: 15
Respuesta: Problema con Select

iislas podrias adaptar mi solucion a la forma que decis vos con el not exists?
  #10 (permalink)  
Antiguo 24/05/2012, 11:31
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: Problema con Select

No tengo forma de probarlo, pero:

Código SQL:
Ver original
  1. SELECT cli.cod_client
  2.     FROM cliente cli INNER JOIN facturas fac
  3.     ON cli.cod_client = fac.cod_client
  4.     AND NOT EXISTS(SELECT c.cod_client FROM clientes c WHERE
  5.                     c.cod_client = cli.cod_client AND
  6.                     f.fecha_emis <= '2012-01-31')

Nota: En mi caso, hago un JOIN y no un = para unir las tablas.
__________________
MCTS Isaias Islas

Etiquetas: select
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 01:35.