Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-09-2005
VRO VRO is offline
Miembro
 
Registrado: abr 2004
Posts: 230
Poder: 21
VRO Va por buen camino
Problema con consulta not in (select ....)

Hola, tengo un problemilla con uhna consulta not in, no son mi fuerte pues generalmente tengo lagún atasco con ellas.

Bueno primeramente deciros que utilizo interbase 6.0, la consulta la tengo en una procedimiento almacenado, pero bueno eso no es trascendental para el problema ya que todas las de este tipo las he hecho de esta forma y no me han dado problemas.

Os detallo como va el asunto:
Tengo 2 tablas una de estancias y otra de facturas de la siguiente forma:

estancia habfact
cod_hab cod_fact
fechai cod_hab
fechaf cod_r
cod_cli
cod_emp
cod_r

estancia habfact
100 1
10/09/05 100
20/09/05 1
2
2
1

101 2
10/10/05 101
20/10/05 2
0
0
2

102 3
... 102
... 3
...
...
3


Hay os he puesto los campos de ambas tablas, siendo los campos
importantes cod_hab(habitacion) y cod_r (reserva) ,lo que pretendo
hacer es que me salgan todas las estancias que no están facturadas,
pero tiene el siguiente inconveniente: se relacionan por dos campos cod_hab y cod_r, el código de reserva puuede tener más de una habitacion
(cod_hab) asignada y una misma habitacion(cod_hab) puede
pertenecer a diferentes (cod_r), y por si fuera poco yo igual
sólo quiero facturar un cod_r con un cod_hab, es decir, que de
una reserva sólo quiero facturar una habitación y no todas ó
facturo una habitación perteneciente a una reserva, pero también
pertenece a otras eso sí en diferentes fechas.

Bueno basicamente yo se lo que quiero sacar pero no se como, lo que yo hago es lo siguiente:
Código:
 
SELECT ESTANCIA.COD_HAB,ESTANCIA.FECHAI,ESTANCIA.FECHAF,
ESTANCIA.DEPOSITO,REGIMEN.COD_REG,REGIMEN.SIGLAS,REGIMEN.TIPO,
ESTANCIA.COD_R,ESTANCIA.HABOBLI
FROM ESTANCIA,REGIMEN
WHERE ESTANCIA.COD_REG=REGIMEN.COD_REG
AND (((ESTANCIA.FECHAI>=:FI) AND 
(ESTANCIA.FECHAF<=:FF)) OR 
((ESTANCIA.FECHAF>=:FI) AND 
(ESTANCIA.FECHAF<=:FF) AND 
(ESTANCIA.FECHAF<=:FF) AND (ESTANCIA.DIFMES>=:FI)
 AND (ESTANCIA.DIFMES<=:FF))OR
 ((ESTANCIA.FECHAI>=:FI)AND (ESTANCIA.FECHAI<=:FF) 
AND (ESTANCIA.DIFMES>:FF)) OR ((ESTANCIA.FECHAI<=:FI) 
AND (ESTANCIA.FECHAF>=:FF)) or ((estancia.fechai<=:FI) AND ((ESTANCIA.FECHAF>=:FI) AND (ESTANCIA.FECHAF<=:FF))) OR (((ESTANCIA.FECHAI>=:FI) AND (ESTANCIA.FECHAI<=:FF)) AND (ESTANCIA.FECHAF>=:FF)))
AND (ESTANCIA.COD_HAB NOT IN(SELECT HABFACT.COD_HAB FROM HABFACT,ESTANCIA WHERE HABFACT.COD_R=HABFACT.COD_R AND HABFACT.COD_HAB=ESTANCIA.COD_HAB)
AND (ESTANCIA.COD_R NOT IN (SELECT HABFACT.COD_R FROM HABFACT,ESTANCIA WHERE ESTANCIA.COD_HAB=HABFACT.COD_HAB AND ESTANCIA.COD_R=HABFACT.COD_R) and estancia.cod_hab not in (SELECT HABFACT.COD_R FROM HABFACT,ESTANCIA WHERE ESTANCIA.COD_HAB=HABFACT.COD_HAB AND ESTANCIA.COD_R=HABFACT.COD_R))
ORDER BY ESTANCIA.FECHAI ASC
lo que hace aqui es que primero me comprueba que la reserva no este en la tabla factura y luego que la habitacion de estancia no esté en lña tabla factura por lo tanto me lo coje de líeas de la tabla distintas y yo lo que quiero es que lo compruebe las 2 condiciones de una vez de esta forma me lo cojería de la misma fila de valores de la tabla.

No se si me he explicado muy bien u os he liado más, si no lo entendeís por favor decidmelo y me intento explicar mejor, aunque la verdad es que no se como hacerlo.

Gracias por su ayuda.

Última edición por VRO fecha: 27-09-2005 a las 19:06:22.
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:23:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi