FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
|