|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Bonjour,
Voilà ma requête ci-dessous ne ramène pas les bonnes infos . Je m'emmêle un peu les pinceau avec les left join et left outer join, à mon avis ma requête est fausse au niveau de la ligne "gamme produit". Code :
|
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
LEFT JOIN et LEFT OUTER JOIN c'est la même chose, à mon avis le problème s'est l'utilisation du WHERE ou tu filtres des lignes ce qui revient à utiliser une jointure interne avec la table Article.
Il faut placer la condition de filtre dans le ON, enfin je suppose que c'est ça le problème car tu ne le décris pas : Un exemple ici du phénomène : Jointure externe et condition de restriction Code :
|
||
|
|
00
|
|
|
#3 | |||
![]() ![]() |
Beaucoup de choses à corriger dans cette requête !
![]() 1) DISTINCT opère sur toute la ligne donc inutile d'essayer de mettre une colonne entre parenthèses, ça n'aura aucun effet ! => Pourquoi avoir mis un DISTINCT ? Quel est son but ? 2) La partie RIGHT, MID, LEFT sur une colonne de date ressemble à un formatage d'une date SQL au format français. => Il existe DATE_FORMAT pour faire cela plus simplement ! 3) La suite du formatage de date fait une concaténation de plusieurs colonnes. On s'approche de la cosmétique, qui n'est pas vraiment le boulot du SGBD mais celui du logiciel qui présente les données. 4) Dans cette partie, je vois un COALESCE sur le numéro de commande. Comme la table des commandes est la table à gauche de toutes les jointures externe, tous les numéros de commandes seront retournés. => Y a t-il des commandes sans numéro ? => Idem d'ailleurs pour les autres COALESCE ! Sont-ils vraiment utiles ? 4) Inutile de mettre les conditions de jointures entre parenthèses. Au passage, LEFT JOIN ou LEFT OUTER JOIN, c'est pareil ! 5) L'utilisation d'alias pour les tables rend l'écriture et la lecture de la requête plus facile. Ainsi que l'indentation de la requête. 6) IDGameProduit semble être un identifiant de type entier, comme il se doit. => Inutile de mettre la valeur cherchée entre apostrophes ! 7) Mettre une restriction dans le WHERE portant sur une table située à droite d'une jointure externe gauche est équivalent à faire un INNER JOIN sur cette table, comme je l'explique dans mon blog. => Il faut déplacer cette restriction dans la condition de jointure. Voici la requête récrite : Code :
Citation:
N'ayant pas de boule de cristal, je ne peux pas savoir quel était le résultat attendu, quel est le résultat obtenu ni à partir de quel jeu de données au départ. Merci d'éclairer ma lanterne sur ce point si tu veux une aide efficace.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#4 | |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Tout d'abord merci pour vos réponses!
skuatamad: Je peux mettre mon critère que dans le where, j'avais pensé à ta solution. Cinephil: Je mets le select parce qu'il me retourne 2 fois le même numéro de commande sinon j'ai des doublons si plusieurs articles ont été définis pour une commande. Effectivement, tous les coalesce n'étaient pas nécéssaires. Et la requête,même après avoir pris en compte vos remarques ne me retourne toujours pas les bon enregistrement pour un article et une gamme de produit renseignée. Si je mets Citation:
|
|
|
|
00
|
|
|
#5 | ||
![]() ![]() |
Bis repetita :
Citation:
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Commande :
Commande.IDCommande = 1 Commande.IDAgenceCommerciale = 2 Commande.IDClient = 3 CommandeLigne: CommandeLigne.IDCommandeLigne =1 CommandeLigne.IDCommande = 1 CommandeLigne.IDArticle = 2 Article: Article.IDArticle = 2 Article.IDGammeProduit = 1 Article.Designation = "Article1" GammeProduit: GammeProduit.IDGammeProduit =1 GammeProduit.Designation = "Gamme1" Comment récupérer les commandes appartenant à la Gamme 1 et concernant l'artcle Article1 ? |
|
|
00
|
|
|
#7 | |||
![]() ![]() |
Si le besoin est juste celui-ci :
Citation:
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|||
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Citation:
Tu peux développer Cinephil, STP ? [edit]Oups, au temps pour moi. je viens de capter
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
|
00
|
|
|
#9 |
|
Membre régulier
![]() Inscription : janvier 2004 Messages : 440 ![]() |
Merci pour tout!
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com