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] Problème requete SQL sur plusieurs tables


Sujet :

Langage SQL

  1. #21
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Bon alors normalement y'a juste a rajouter la jointure avec la table fournisseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT P.nom_modele, M.nom_motif, M.type, nom_fournisseur
    FROM tp_modele P, ts_modele_motif T, tp_motif M, td_fournisseur F
    WHERE P.num_modele=T.#num_modele
    AND T.num_visuel=M.#num_visuel
    AND F.num_fournisseur=M.#num_fournisseur
    AND P.nom_modele='$var';
    Normalement celle là devrait fonctionner...
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    griese ta requete est correcte mais ne retourne rien dans l'état actuel des choses. Et pourquoi as tu utilisé des alias ?

    Tofalu que m'apporterait les jointures a droite ou a gauche ?

    Pour l'instant ma requete fonctionne mais sans le fournisseur, ca doit ètre pas ètre grand chose pour que ca marche bien ... Je continue a chercher

  3. #23
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    J'ai juste mis des alias pour éviter de remettre le nom des tables à chaque fois, gain de temps . Tu veux dire que quand tu rajoutes la jointure avec la table fournisseur, la requete ne retourne rien ou il te manque les infos des fournisseurs ?
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  4. #24
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Bon après maintes manips et essais voila ou j'en suis : si je met la requete basique sans la jointure avec la table fournisseur et sans l'affichage du fournisseur, ca marche et affiche les données, sans le fournisseur bien sur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `type` , `ordre` , `nom_motif` , `dateCrea` , `dateValide` , `util` , `outil` , `valide`
    FROM `tp_modele` , `ts_modele_motif` , `tp_motif`
    WHERE `tp_motif`.`num_motif` = `ts_modele_motif`.`#num_motif`
    AND `ts_modele_motif`.`#num_modele` = `tp_modele`.`num_modele`
    AND `tp_modele`.`nom_modele` = "mod1"
    Par contre si je rajoute la ligne pour le fournisseur, ca ne m'affiche plus que les enregistrements ou il y a un fournisseur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT `type` , `ordre` , `nom_motif` , `dateCrea` , `dateValide` , `nom_fournisseur` , `util` , `outil` , `valide`
    FROM `tp_modele` , `ts_modele_motif` , `tp_motif` , `td_fournisseur`
    WHERE `tp_motif`.`num_motif` = `ts_modele_motif`.`#num_motif`
    AND `ts_modele_motif`.`#num_modele` = `tp_modele`.`num_modele`
    AND `td_fournisseur`.`num_fournisseur` = `tp_motif`.`#num_fournisseur`
    AND `tp_modele`.`nom_modele` = "mod1"
    Et comme les enregistrements qui n'ont pas de fournisseurs ont ce champ a NULL, j'en conclus que la requete marche pas a cause de ca. Donc logiquement si je remplace les NULL par des champs vides ... ca devrait rouler nan ? Bon allez je teste tout ca, je vous tiens au courant

  5. #25
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    J'en suis pas si sur que ça. Comme tu fais une jointure avec la table founisseur, il retourne que les lignes où les deux champs fournisseurs correspondent. Pour qu'il prenne en compte aussi les enregistrement sans fournisseur il vaudrait mieux utiliser le LEFT JOIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT `type` , `ordre` , `nom_motif` , `dateCrea` , `dateValide` , `nom_fournisseur` , `util` , `outil` , `valide`
    FROM `tp_modele` , `ts_modele_motif` , `tp_motif`
    LEFT JOIN `td_fournisseur` ON td_fournisseur.`num_fournisseur` = `tp_motif`.`#num_fournisseur`
    WHERE `tp_motif`.`num_motif` = `ts_modele_motif`.`#num_motif`
    AND `ts_modele_motif`.`#num_modele` = `tp_modele`.`num_modele`
    AND `tp_modele`.`nom_modele` = "mod1"
    Je suis pas du tout sur de la syntaxe, je maitrise pas trop les jointures de ce type
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  6. #26
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Vous avez dit bizarre...
    Bonjour Tiib_CD et al.

    L'intégrité référentielle est-elle mise en oeuvre ?

    Sinon, on peut s'attendre à de très grosses surprises...
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Yaiiiise t'assure griese je te remercie du temps que tu as passé a chercher. Ca marche ! Bon alors par contre j'aimerai bien qu'on m'explique lol, j'ai vu ca vite fait en cours mais j'ai pas trop retenu a l'époque ^^.

    Et sinon fsmrel que veux tu dire au niveau de l'intégrité référentielle ? Je croyais que yavait que sous access qu'on faisait ca ? Vu que les jointures en SQL sont faites dans chaque requete (???) M'enfin je dois surement m'embrouiller !

  8. #28
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Ah bah c'est fait plaisir, ça n'aura pas servi à rien tout ce temps passé dessus. Bon maintenant je t'explique. En fait le LEFT JOIN permet de faire une jointure entre deux tables comme dans une clause WHERE. Mais la subtilité du LEFT JOIN, c'est qu'il te retourne la ligne même si il ne trouve pas de correspondance entre les deux champs (ici td_fournisseur.num_fournisseur =tp_motif.#num_fournisseur). Alors qu'avec la jointure dans la clause WHERE, il ne retournera que les lignes qui ont répondu à tous les critères du WHERE dont l'égalité entre les deux champs (ici td_fournisseur.num_fournisseur =tp_motif.#num_fournisseur). Voilà en gros ce qui se passe. J'espère avoir été clair, n'hésite pas à redemander plus d'infos si tu comprends pas.
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 29
    Points : 14
    Points
    14
    Par défaut
    Hum oui ca me rappelle quelque chose lol (vive le café le matin avant les cours ^^). Merci pour l'explication, ca me servira. Mais la diff avec la jointure a droite ? Elle c'est l'inverse ? Elle ne retourne que les enregistrements qui ne correspondent pas ? Bon now faut que je m'attaque aux visuels et aux éditions supressions des données. Hum ca va ètre galère ca aussi ! M'enfin je sais ou trouver de l'aide

  10. #30
    Membre actif Avatar de griese
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    646
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 646
    Points : 281
    Points
    281
    Par défaut
    Non il ne me semble pas. Je crois que le RIGHT JOIN fait la meme chose que LEFT JOIN, mais c'est juste que en fonction du sens d'écriture des table, regarde :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT `type` , `ordre` , `nom_motif` , `dateCrea` , `dateValide` , `nom_fournisseur` , `util` , `outil` , `valide`
    FROM `tp_modele` , `ts_modele_motif` , `tp_motif`
    LEFT JOIN `td_fournisseur` ON td_fournisseur.`num_fournisseur` = `tp_motif`.`#num_fournisseur`
    est équivalent à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT `type` , `ordre` , `nom_motif` , `dateCrea` , `dateValide` , `nom_fournisseur` , `util` , `outil` , `valide`
    FROM `tp_modele` , `ts_modele_motif`,`td_fournisseur`
    RIGHT JOIN `tp_motif` ON `tp_motif`.`num_fournisseur` = td_fournisseur..`#num_fournisseur`
    Il me semble que c'est ça, mais j'ai un doute Mais attention, le LEFT JOIN te retourne les résultats où il y a des correspondances ET où il n'y en pas !!!
    (\ _ /)
    (='.'=) Voici Lapinou. Aidez le à conquérir le monde
    (")-(") en le reproduisant.

    http://mosfootball.over-blog.com

  11. #31
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Citation Envoyé par Tibii_CD
    Et sinon fsmrel que veux tu dire au niveau de l'intégrité référentielle ? Je croyais que yavait que sous access qu'on faisait ca ? Vu que les jointures en SQL sont faites dans chaque requete (???) M'enfin je dois surement m'embrouiller !
    L’intégrité réfentielle est la règle qui est garantie par la mise en œuvre des clés étrangères. Le tout est de ne pas oublier de procéder à cette mise en œuvre.
    L'intégrité référentielle transcende les SGBD, qu'ils s'appellent Access, Oracle ou autre. C'est une contrainte qui signifie par exemple qu'il ne peut pas exister de Motif Modèle sans Modèle (je ne sais pas si l'exemple est pertinent, mais il est certain que, dans une base de données bancaires, trouver des comptes faisant référence à des numéros de clients pour lesquels on a perdu les clients, ça fait désordre, un truc à être mis à pied).
    J’espère que nous sommes en phase.
    Bon courage.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

Discussions similaires

  1. [MySQL]Requete SQL sur 2 tables
    Par Khleo dans le forum Langage SQL
    Réponses: 4
    Dernier message: 29/02/2008, 00h42
  2. requêtes sql sur plusieurs tables
    Par zahiton dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/11/2005, 10h59
  3. [SQL] requêtes SQL sur plusieurs tables
    Par zahiton dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 24/11/2005, 16h32
  4. Ecrire une requete SQL sur plusieurs lignes
    Par PrinceMaster77 dans le forum ASP
    Réponses: 2
    Dernier message: 15/11/2004, 14h47
  5. A propos d'une requête SQL sur plusieurs tables...
    Par ylebihan dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/09/2003, 16h26

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