• Lunes 18 de Noviembre de 2024, 00:43

Autor Tema:  Encallado con una SQL con un NOT exists de por medio  (Leído 1423 veces)

radge

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Encallado con una SQL con un NOT exists de por medio
« en: Martes 16 de Junio de 2009, 17:20 »
0
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

arielb

  • Moderador
  • ******
  • Mensajes: 771
  • Nacionalidad: pa
    • Ver Perfil
    • http://coder-pa.blogspot.com
Re: Encallado con una SQL con un NOT exists de por medio
« Respuesta #1 en: Sábado 20 de Junio de 2009, 17:59 »
0
hola, intenta con NOT IN y no con not exists
"Porque de tal manera amó Dios al mundo que dio a su hijo unigénito para que todo aquél que en él crea no se pierda mas tenga vida eterna"
Juan 3:16

http://coder-pa.blogspot.com

Shiquilla

  • Miembro MUY activo
  • ***
  • Mensajes: 188
  • Nacionalidad: es
    • Ver Perfil
    • http://www.songesoft.com
Re: Encallado con una SQL con un NOT exists de por medio
« Respuesta #2 en: Miércoles 24 de Junio de 2009, 16:27 »
0
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,
« §hÿqµïllæ »