Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/04/2011, 11h40   #1
Membre du Club
 
Charles Taquet
Inscription : juillet 2010
Messages : 88
Détails du profil
Informations personnelles :
Nom : Charles Taquet
Localisation : France, Seine Maritime (Haute Normandie)

Informations forums :
Inscription : juillet 2010
Messages : 88
Points : 42
Points : 42
Par défaut Récupérer la date la plus récente

Bonjour

J'effectue un site pour gérer une bibliothèque, et je dois faire une requête qui récupère tous les livres disponibles. Donc je suis partis du princique, que cette requête doit me retourner tous les livres emprunté et dont la date de retour et < à la date du jour et tous les livres jamais emprunter.

Donc sur le principe je sais pas si c'est bon. J'ai fait cette requête, voic celle si :
Code :
1
2
3
4
5
6
7
8
9
10
SELECT DISTINCT Livre.Id_Livre, N_serie,Serie, Titre,Livre.Type, Date_début,Date_Fin 
FROM [Livre] 
INNER JOIN Emprunt ON emprunt.Id_Livre = Livre.Id_Livre
WHERE Date_Fin IS NOT NULL
   AND Date_Fin < GETDATE()
UNION
SELECT  Livre.Id_Livre, N_serie, Serie, Titre, Livre.Type, Date_début, Date_Fin 
FROM Livre 
LEFT JOIN Emprunt ON emprunt.Id_Livre = Livre.Id_Livre
WHERE ID_emprunt IS NULL
Le problème sur cette requete c'est qui me retourne un livre qui a été emprunté et rendu. Mais entre temps il a été ré-emprunté

Exemple de retour

[ID] [Titre][Date debut] [date retour]
1 Essai 01/01/2011 03/04/2011


En base j'ai le même livre emprunté le 10/04/2011

Si vous avez une idée je suis preneur

Merci
charlingals1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 12h39   #2
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 445
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 445
Points : 7 532
Points : 7 532
Peux-t préciser quelles sont les dates qui qualifient un emprunt ?
Comment identifies-tu qu'un livre est rendu ?
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 13h14   #3
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
La 2eme partie de la requête après le UNION répond presque au problème mais au lieu que la jointure gauche soit avec toute la table emprunt il faudrait qu'elle soit avec les emprunts qui ont date_fin à null (=livre non encore rendu)
Donc quelque chose du genre de:
Code :
1
2
3
4
SELECT  Livre.Id_Livre,N_serie,Serie,Titre,Livre.Type, Date_début,Date_Fin 
FROM Livre LEFT JOIN (SELECT * FROM Emprunt WHERE date_fin IS NULL)
 ON emprunt.Id_Livre = Livre.Id_Livre
WHERE ID_emprunt IS NULL
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h37   #4
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

ou en reformulant : quels sont les livres qui ne sont pas empruntés actuellement ?

Code SQL :
1
2
3
4
5
6
7
8
9
 
SELECT Livre. ID, ...
FROM Livre L
WHERE NOT EXISTS(
    SELECT *
    FROM Emprunt E
    WHERE E.ID_Livre = L.id_livre
    AND date_fin > GETDATE()
)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h45   #5
Modérateur
 
Inscription : octobre 2008
Messages : 1 505
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 505
Points : 2 034
Points : 2 034
Les conditions de la 1ere requête donnaient plutôt l'impression que date_fin était à null tant que le livre n'était pas revenu puis était mis à la date du jour au moment du retour.
Dans ce cas date_fin>getdate() n'est jamais vrai et n'est donc pas utilisable comme condition.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2011, 14h51   #6
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
arfff

en y relisant, c'est vrai que ce n'est pas clair !
car dans la première requête, il teste également AND Date_Fin < GETDATE()

Ce qui sera du coup toujours vrai..



mais effectivement ton anaylse parait plus logique et dans ce cas (date_fin a null tant que le livre n'est pas rendu) il faudrait faire :

Code SQL :
1
2
3
4
5
6
7
8
9
 
SELECT Livre. ID, ...
FROM Livre L
WHERE NOT EXISTS(
    SELECT *
    FROM Emprunt E
    WHERE E.ID_Livre = L.id_livre
    AND date_fin IS NULL
)
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h09.


 
 
 
 
Partenaires

Hébergement Web