IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[MySQL 4.018] remplacer une requête imbriquée de type IN


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 91
    Points
    91
    Par défaut [MySQL 4.018] remplacer une requête imbriquée de type IN
    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 )
    )

  2. #2
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye, en espérant que ton moteur supporte la syntaxe normée pour les jointures...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT Rendre.Nom_Bibliotheque
    FROM Bibliotheque Rendre INNER JOIN Personne p
                                     ON Rendre.id_bibliotheque = p.id_biblio_a_rendre
                             INNER JOIN Emprunt e
                                     ON p.id_emprunt = e.id_emprunt
                             INNER JOIN Bibliotheque Prendre
                                     ON Prendre.id_bibliotheque = e.id_bibliotheque
    WHERE Prendre.NomBibliotheque = 'bibli_du_college'

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Points : 91
    Points
    91
    Par défaut
    J'avais pas pensé aux alias sur les tables, avec ca ce n'est même plus la peine de faire des jointures.
    Merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Remplacer une date incrémentée dans une base de donnée [mysql]
    Par Mousshaker dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 16/12/2014, 14h27
  2. comment remplacer une boucle PHP par une ligne MySQL ?
    Par dsant dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/09/2010, 19h04
  3. Réponses: 6
    Dernier message: 23/01/2007, 10h17
  4. Remplacer une query imbriqué sous mySQL 4.01
    Par brousaille dans le forum Requêtes
    Réponses: 6
    Dernier message: 16/01/2006, 19h33
  5. comment remplacer une partie de texte dans un champs
    Par patlapi dans le forum Paradox
    Réponses: 4
    Dernier message: 20/11/2003, 14h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo