Access - Ayuda con la creación de una consulta muy especifica

 
Vista:
sin imagen de perfil

Ayuda con la creación de una consulta muy especifica

Publicado por Celia (2 intervenciones) el 26/06/2018 11:55:29
Buenos días a todos,
después de mucho buscar en la red, me decido a escribir en un foro ya que la ayuda que necesito es tan especifica que no consigo encontrar solución por ningún lado.
Estoy creando un proyecto en visual studio sobre una biblioteca, En este proyecto utilizo Access.
De momento lo que es con el código de vb no tengo problema. El problema lo tengo en la creación de una consulta desde access.
Tengo tres tablas
Usuarios (Clave principal numUsuario)
Libros (Clave principal ISBN)
Prestamos (Clave principal numPrestamo)
Necesito una consulta en la cual aparezcan los libros que están disponibles para prestamos, esos son aquellos que nunca se han prestado y aquellos que siendo prestados ya hayan sido devueltos.
De primeras parece que la consulta funciona. El problema viene cuando quiero prestar un libro que ha sido devuelto.
Tal y como estoy creando la consulta de libros disponibles me busca aquellos libros que tienen fechaDevolución (si NO hay fecha de devolución se entiende que el libro está en prestamo) pero en cuanto un libro ya ha sido devuelto una vez, ya existe una fecha de devolución asociada a ese libro y entiende que está disponible.
En la consulta tendría que filtrar de algún modo que aunque un libro tenga fecha de devolución (por haber sido prestado y devuelto con anterioridad), pero en ese momento solo tiene fechadeInicioPrestamo (por haber sido prestado de nuevo) pues que ese libro no figure en la lista de librosDisponibles.
No se si me he explicado con claridad.
Adjunto una foto del diseño de la consulta y la select de dicha consulta que tengo actualmente por si aclara más lo que digo :

1
2
3
SELECT [Tabla Libros].Autor, [Tabla Libros].Titulo, [Tabla Libros].Genero, [Tabla Libros].ISBN, [Tabla Prestamos].Fecha_Devolucion
FROM [Tabla Libros] LEFT JOIN [Tabla Prestamos] ON [Tabla Libros].[ISBN] = [Tabla Prestamos].[ISBN]
WHERE ((([Tabla Prestamos].ISBN) Is Null)) OR ((Not ([Tabla Prestamos].Fecha_Devolucion) Is Null));

Muchas gracias de antemano por la ayuda!!



captura-pantalla-consulta-libros-disponibles
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con la creación de una consulta muy especifica

Publicado por Anonimo (3322 intervenciones) el 26/06/2018 15:22:07
Probablemente si utilizamos solo la tabla de prestamos y obtenemos la lista de libros prestados en la actualidad, una comparación con la de libros buscando los 'no coincidentes' daría el resultado que se desea (y posiblemente mas rápido, pues se trabajaría con bastantes menos datos).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 78
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Ayuda con la creación de una consulta muy especifica

Publicado por Antoni Masana (32 intervenciones) el 27/06/2018 13:19:29
Primero creamos una consulta los libros que están en préstamo:

1
2
3
SELECT [Tabla Prestamos].*
FROM   [Tabla Prestamos]
WHERE  [Tabla Prestamos].Fecha_Devolucion Is Null

Ahora creamos una consulta de los libros que no coincidan con la anterior

1
2
3
4
5
6
SELECT [Tabla Libros].*
FROM   [Tabla Libros] INNER JOIN ( SELECT [Tabla Prestamos].*
                                   FROM   [Tabla Prestamos]
                                   WHERE  [Tabla Prestamos].Fecha_Devolucion Is Null
                                 ) Prestado
                              ON Not [Tabla Libros].ISBN = Prestado.ISBN

Y ya tienes los libros que deseas.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda con la creación de una consulta muy especifica

Publicado por Anonimo (3322 intervenciones) el 27/06/2018 14:16:16
Comenzare con una anotación, no se tiene en cuenta (el autor del hilo no lo especifica) el que exista en esa biblioteca mas de un ejemplar del mismo libro
Con esa salvedad el método que propuesto en la primera respuesta es mas ¿simple? que el que se ha publicado posteriormente (o simplemente es otra forma de hacerlo).


Aceptemos como valida una consulta que selecciona una serie de registros:
1
SELECT IDLibro FROM TablaPrestamos WHERE Devuelto = False;

Solo hay que generar un cruce de tablas y seleccionar los no coincidentes:
1
Select * From TablaLibros Where IDLibro NOT In(SELECT IDLibro FROM TablaPrestamos WHERE Devuelto = False);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con la creación de una consulta muy especifica

Publicado por Celia (2 intervenciones) el 28/06/2018 09:12:51
Muchisimas gracias por vuestra ayuda y tiempo.

Os cuento, al final lo he resulto de esta manera. Primero he creado una consulta con esta select:
SELECT [Tabla Prestamos].ISBN FROM [Tabla Prestamos] WHERE ((([Tabla Prestamos].fechadeInicioPrestamo) Is Not Null) AND (([Tabla Prestamos].Fecha_Devolucion) Is Null));
y después l he creado una consulta de "no coincidentes" entre la tabla Libros y esa consulta de libros no disponibles.

Otra vez muchas gracias a todos por tomaros la molestia en ayudar.
Un saludo.

Por cierto, no se como dar el Post por cerrado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar