Registros que no se tienen en cuenta en una consul
Publicado por Gary (6 intervenciones) el 09/05/2010 00:13:59
Hola a todos!!
A ver si me podéis ayudar porque me esta sucediendo una cosa de lo más extraña y para la que no tengo explicación.
Os explico el tema: Mi objetivo era realizar una consulta SQL para rellenar con su resultado un DataGrid y, dado que no soy ningún experto en SQL, preparé unos registros de prueba para comprobar que la consulta funcionaba correctamente.
En la consulta trabajo con dos tablas las cuales tienen un campo fecha.
Mi consulta recibe como parametro una fecha que introduce el usuario.
Necesito que la consulta devuelva los registros en los que la fecha coincide con la primera tabla, pero que la fecha de la segunda tabla no coincida con la fecha introducida por el usuario, siempre que los registros sean del mismo socio.
Ejemplo:
El socio1 tiene un registro en la tabla1 con fecha 1/1/10 y otro registro en la tabla2 con la misma fecha.
El socio2 tiene un registro en la tabla1 con fecha 1/1/10 y otro registro en la tabla2 con la fecha 30/1/10.
El socio3 tiene un registro en la tabla1 con fecha 15/10/09 y otro registro en la tabla2 con la fecha 1/1/10.
Si el usuario introduce como parametro la fecha 1/1/10 me deberia devolver solo el registro del socio2, ya que este es el único que coincide la fecha introducida por el usuario con la fecha del registro de la tabla1 y no tiene un registro con la misma fecha en la tabla2. Por esta misma razón el socio1 no aparecería, ya que este tiene un registro con la misma fecha en la tabla2 y el socio3 tampoco ya que la fecha de la tabla1 no coincide con la introducida como parametro.
A continuación expongo como he planteado la consulta:
SELECT DISTINCT HISTORIAL_ALQ.num_socio AS [N Socio], HISTORIAL_ALQ.fecha_devolucion AS [Fecha Devolucion], HISTORIAL_ALQ.num_parte AS [N Parte], HISTORIAL_ALQ.cantidad_servida AS Cantidad, HISTORIAL_ALQ.cod_ropa AS [Cod Ropa], HISTORIAL_ALQ.quien_dev AS [Quien devuelve?], HISTORIAL_ALQ.notas AS Notas, HISTORIAL_ALQ.num_socio AS Socio FROM (HISTORIAL_ALQ INNER JOIN HISTORIAL_LLV ON HISTORIAL_ALQ.num_socio = HISTORIAL_LLV.num_socio) WHERE (HISTORIAL_ALQ.fecha_devolucion = #" & fecha & "#) AND (HISTORIAL_ALQ.num_socio NOT IN (SELECT num_socio FROM HISTORIAL_LLV HISTORIAL_LLV_1 WHERE (fecha_devolucion = #" & fecha & "#)))"
Tras varias pruebas consegui la sentencia SQL citada y tras los test con los registros de prueba que habia preparado veo que funciona correctamente.
Cual es mi sorpresa al continuar introduciendo registros para hacer más tests y descubro que la consulta solo funciona con los registros que tenía previamente pero no con los nuevos q introduzco, es como si los ignorará...
He probado con una copia de la BD en blanco y tampoco funciona con los registros q introduzco pero, por el contrario si copio y pego los antiguos registros de la anterior BD en la nueva si funciona correctamente.
Estoy trabajando con una BD de Access.
Espero haberme explicado con claridad y encontrar a alguien que sepa como solucionar esto porque para mi es un misterio.
Gracias por adelantado, un saludo!!
A ver si me podéis ayudar porque me esta sucediendo una cosa de lo más extraña y para la que no tengo explicación.
Os explico el tema: Mi objetivo era realizar una consulta SQL para rellenar con su resultado un DataGrid y, dado que no soy ningún experto en SQL, preparé unos registros de prueba para comprobar que la consulta funcionaba correctamente.
En la consulta trabajo con dos tablas las cuales tienen un campo fecha.
Mi consulta recibe como parametro una fecha que introduce el usuario.
Necesito que la consulta devuelva los registros en los que la fecha coincide con la primera tabla, pero que la fecha de la segunda tabla no coincida con la fecha introducida por el usuario, siempre que los registros sean del mismo socio.
Ejemplo:
El socio1 tiene un registro en la tabla1 con fecha 1/1/10 y otro registro en la tabla2 con la misma fecha.
El socio2 tiene un registro en la tabla1 con fecha 1/1/10 y otro registro en la tabla2 con la fecha 30/1/10.
El socio3 tiene un registro en la tabla1 con fecha 15/10/09 y otro registro en la tabla2 con la fecha 1/1/10.
Si el usuario introduce como parametro la fecha 1/1/10 me deberia devolver solo el registro del socio2, ya que este es el único que coincide la fecha introducida por el usuario con la fecha del registro de la tabla1 y no tiene un registro con la misma fecha en la tabla2. Por esta misma razón el socio1 no aparecería, ya que este tiene un registro con la misma fecha en la tabla2 y el socio3 tampoco ya que la fecha de la tabla1 no coincide con la introducida como parametro.
A continuación expongo como he planteado la consulta:
SELECT DISTINCT HISTORIAL_ALQ.num_socio AS [N Socio], HISTORIAL_ALQ.fecha_devolucion AS [Fecha Devolucion], HISTORIAL_ALQ.num_parte AS [N Parte], HISTORIAL_ALQ.cantidad_servida AS Cantidad, HISTORIAL_ALQ.cod_ropa AS [Cod Ropa], HISTORIAL_ALQ.quien_dev AS [Quien devuelve?], HISTORIAL_ALQ.notas AS Notas, HISTORIAL_ALQ.num_socio AS Socio FROM (HISTORIAL_ALQ INNER JOIN HISTORIAL_LLV ON HISTORIAL_ALQ.num_socio = HISTORIAL_LLV.num_socio) WHERE (HISTORIAL_ALQ.fecha_devolucion = #" & fecha & "#) AND (HISTORIAL_ALQ.num_socio NOT IN (SELECT num_socio FROM HISTORIAL_LLV HISTORIAL_LLV_1 WHERE (fecha_devolucion = #" & fecha & "#)))"
Tras varias pruebas consegui la sentencia SQL citada y tras los test con los registros de prueba que habia preparado veo que funciona correctamente.
Cual es mi sorpresa al continuar introduciendo registros para hacer más tests y descubro que la consulta solo funciona con los registros que tenía previamente pero no con los nuevos q introduzco, es como si los ignorará...
He probado con una copia de la BD en blanco y tampoco funciona con los registros q introduzco pero, por el contrario si copio y pego los antiguos registros de la anterior BD en la nueva si funciona correctamente.
Estoy trabajando con una BD de Access.
Espero haberme explicado con claridad y encontrar a alguien que sepa como solucionar esto porque para mi es un misterio.
Gracias por adelantado, un saludo!!
Valora esta pregunta


0