Bonjour
Voilà mon problème:
Structure de la BD:
-Une table bibliothèque, qui contient un champ nom et un champ id_bibliotheque.
-Une table emprunt, contenant un id_emprunt et un id_biblio (clef étrangère sur id_bibliotheque, correspond à la bibliotheque où on a emprunté un livre.).
-Une table personne, contenant un id_personne, un id_emprunt (clef étrangère sur un emprunt), et un id_biblio_a_rendre (correspondant à la bibliothèque à laquelle on doit rendre le livre, pas forcément la même que celle où on l'a empruntée)
Je cherche toutes les bibliothèques auxquelles des personnes ayant emprunté des livres à la biblio du collège doivent rendre ces livres. (c'est assez clair? )
J'ai donc fait une requête:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT bibliotheque.nom_bibliotheque FROM personne, bibliotheque WHERE bibliotheque.id_bibliotheque = personne.id_biblio_a_rendre AND personne.id_personne IN (SELECT personne.id_personne FROM personne, emprunt, bibliotheque WHERE personne.id_emprunt = emprunt.id_emprunt AND emprunt.id_biblio = bibliotheque.id_bibliotheque AND bibliotheque.nom = "bibli_du_college" )
Normalement, ca devrait marcher, mais voilà, mon interpréteur ne comprend pas les requêtes imbriquées.
Ma question est donc:
Est-il possible de transformer la requête précédente, afin de supprimer la requête imbriquée? (au moyen de jointures par exemple)
Merci d'avance.
ps: La structure de ma BD est super mal foutue, mais c'est simplement une analogie de ce dont je me sers, pour simplifier, donc pas la peine de vouloir la changer .
pps: informations diverses:
MySQL 4.018
codes de création des tables:
CREATE TABLE bibliotheque
(id_bibliotheque INTEGER(5),
nom_bibliotheque VARCHAR(50),
PRIMARY KEY (id_bibliotheque)
)
CREATE TABLE emprunt
(id_emprunt INTEGER(10) ,
id_bibliotheque INTEGER(5),
PRIMARY KEY (id_emprunt)
)
CREATE TABLE personne
(id_personne INTEGER(6) ,
id_emprunt INTEGER(10),
id_biblio_a_rendre INTEGER(5),
PRIMARY KEY (id_personne )
)
Partager