SoloCodigo

Bases de Datos => SQL Server => Mensaje iniciado por: radge en Martes 16 de Junio de 2009, 17:20

Título: Encallado con una SQL con un NOT exists de por medio
Publicado por: radge en Martes 16 de Junio de 2009, 17:20
Buenas estoy intentando hacer esta consulta , juntando  una tabla de clientes con otra de albaranes donde la fecha del albaran es entre el 2005 y el 2009 , pero luego hago un NOT EXISTS para mirar que de las ventas seleccionadas NINGUNA contenga el TIPO DE PRODUCTO entre el año 2006 y 2009. Es decir intento hacer que tengan ventas entre el año 2005 y 2009 , pero luego intento hacer que de esas ventas no haya ninguna entre el 2006 y 2009 que contenga el tipo de producto = 2



Citar
Select * from cliente c inner join albaran a on
c.codigo_cliente = a.codigo_cliente and c.tienda = a.tienda  

where not exists (Select * from albaran a2 inner join lineaAlbaran l on a2.tienda = l.tienda where a2.tienda = a.tienda and (year(a2.data) >= 2006 and year(a2.data) <= 2009)  and l.tipoproducto <> 2)

and year a.data  between 2005 and 2009



La sql me funciona pero el not exists no , si lo comento me devuelve los mismos resultados.

gracias radge
Título: Re: Encallado con una SQL con un NOT exists de por medio
Publicado por: arielb en Sábado 20 de Junio de 2009, 17:59
hola, intenta con NOT IN y no con not exists
Título: Re: Encallado con una SQL con un NOT exists de por medio
Publicado por: Shiquilla en Miércoles 24 de Junio de 2009, 16:27
La instrucción EXISTS devuelve un TRUE ó FALSE.

Para que esa select te funcione, debes igualar algo de la select anterior a la subselect que está dentro del exists.

Es decir, suponiendo que tengas la tabla Empresas con primary key (idEmpresa) y la tabla Trabajadores con primary key (idempresa, idtrabajador), si queremos sacar las empresas que no tengan trabajadores utilizando EXISTS la Select sería la siguiente:
Código: SQL
  1. SELECT E.* FROM Empresas E WHERE NOT EXISTS (SELECT 1 FROM Trabajadores T WHERE E.idEmpresa = T.idEmpresa)
  2.  

En tu caso deberías igualar algo (las keys) de la tabla exterior a la que está dentro del EXISTS para que devuelva TRUE o FALSE.

PD: No recomiento usar ni IN ni EXISTS ya que son instrucciones lentas cuando tenemos muchos registros.

Saludos,