requete SQL qui ne donne pas le bon resultat

requete SQL qui ne donne pas le bon resultat - SQL/NoSQL - Programmation

Marsh Posté le 24-01-2011 à 15:38:44    

Bonjour a tous,  :hello:  
voila c'est pour un exercice de BD pour la gestion d'une bibliothèque
j'ai 2 tables:
 
Emprunt(Personne, livre, dateEmprunt,DateRetourPrevue, DateRetourEffective) qui contient toutes les informations sur les livres empruntés
et
Retour(Personne, livre, DateEmprunt, Pénalité retard) qui contient toutes les infos sur les livres rendus en retard
 
il faut ecrire une requete SQL qui donne comme resultat:
Toutes les personnes ayant TOUJOURS rendu en retard les livres qu'elles ont empruntés? :??:  
 
j'ai essayé avec cette requete mais ça me donne les personnes ayant rendu AU MOINS UNE FOIS un livre en retard et pas TOUJOURS comme l'indique l'énoncé....
 
MA REQUETE: select r.personne from retard r where exists (select e.personne from emprunt e);
 
Je voudrais savoir comment corriger ma requete pour qu'elle me donne le bon résultat :??:  :??:  
 
Help!!! ça fait longtemps que je sèche dessus :(  :??:  :(  
 
Merci beaucoup a ceux qui prendront la peine de me répondre :)

Reply

Marsh Posté le 24-01-2011 à 15:38:44   

Reply

Marsh Posté le 24-01-2011 à 16:39:20    

Voila ce qui devrai te retourner le bon résultat (j'avoue ne pas avoir testé tout a fond):

Code :
  1. SELECT a.Personne
  2. FROM @Emprunt a
  3.     LEFT JOIN (
  4.     SELECT a.Personne
  5.     FROM @Emprunt a
  6.         LEFT JOIN @Retour b ON b.Personne = a.Personne AND b.livre = a.livre AND b.dateEmprunt = a.dateEmprunt
  7.     WHERE b.Personne IS NULL
  8.     GROUP BY a.Personne
  9.     ) b ON b.Personne = a.Personne
  10. WHERE b.Personne IS NULL
  11. GROUP BY a.Personne


 
En gros tu selectionnes toutes les personnes qui ont ete au moins une fois a l'heure et tu ne prends que ceux qui restent (qui n'ont forcément jamais ete a l'heure).

Reply

Marsh Posté le 24-01-2011 à 16:50:35    

Merci Oliiii mais je viens de tester ce que tu viens de poster ça me sort une erreur pour le join
 
De plus je ne comprend pas très bien pourquoi tu as eu recours aux jointures LEFT JOIN au lieu des jointures internes "normales"
 
merci

Reply

Marsh Posté le 24-01-2011 à 17:53:16    

Bizarre le modèle de données :heink:  
On peut tout faire avec la table Emprunt(Personne, livre, dateEmprunt,DateRetourPrevue, DateRetourEffective)
 
Ceux qui ont rendu au moins une fois un livre à temps :
select distinct Personne
from Emprunt
where DateRetourPrevue >= DateRetourEffective
 
Donc :
select distinct Personne from Emprunt
where Personne not in (
  select distinct Personne
  from Emprunt
  where DateRetourPrevue >= DateRetourEffective
)


---------------
Doucement le matin, pas trop vite le soir.
Reply

Marsh Posté le 24-01-2011 à 18:05:40    

ouai merci beaucoup mrbebert ça marche ^^
 
bonne soirée

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed