jointures SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : jointures SQL

par mcorgnet » 30 nov. 2006, 17:34

hum, à priori ça serait ça :

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q, qual_forms F LEFT JOIN qual_evaluations E ON ( Q.Id = E.FieldId AND F.Id = E.FormId ) ORDER BY Q.Tri

par mcorgnet » 30 nov. 2006, 17:30

super, ça tourne !

maintenant, je suis en train d'essayer de mettre plusieurs left join sur la même table.

J'trouve pas la syntaxe ...

par albat » 30 nov. 2006, 17:07

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q LEFT JOIN qual_evaluations E ON (Q.Id = E.FieldId) ORDER BY Q.Tri
devrait mieux fonctionner... ;)

par albat » 30 nov. 2006, 17:06

Ta syntaxe n'est pas correcte.

Tu as écrit :

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q, qual_evaluations E LEFT JOIN qual_evaluations ON ( Q.Id = E.FieldId ) ORDER BY Q.Tri
Ce qui signifie que tu fais une jointure entre qual_evaluations et... qual_evaluations!

par mcorgnet » 30 nov. 2006, 16:58

Pour pousser le test, j'ai réduit (en utilisant ta méthode) le nombre de tables et de champs, et je n'ai pas remis le GROUP BY.

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q, qual_evaluations E LEFT JOIN qual_evaluations ON ( Q.Id = E.FieldId ) ORDER BY Q.Tri
Mes résultats se répètent toujours, je me plante certainement dans mon LEFT JOIN.

Je cherche, je cherche ...

par mcorgnet » 30 nov. 2006, 16:41

cela dit, en fonction de ce que tu viens de me montrer, j'ai corrigé ainsi, et ça tourne :

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q, qual_evaluations E, qual_organismes O, qual_forms F LEFT JOIN qual_evaluations `fields` ON ( Q.Id = E.FieldId ) WHERE E.OrgaId = O.Id AND E.FormId = F.Id AND F.Id =1 GROUP BY Q.Id ORDER BY Q.Tri
Mais les notes (E.Note) sont toujours fausses. Même problème que précédemment si je supprime le GROUP BY, les champs se multiplient.

par mcorgnet » 30 nov. 2006, 16:38

Bah ouais mais si je le mets pas, ça me renvoie une erreur :

"#1109 - Unknown table 'qual_eval_fields' in on clause "


Cela dit, j'ai fait un test sans le group by, et ça me renvoie pas loin de dix fois chaque ligne, et le champs "note" est parfois à 0, parfois à 2 (valeur que j'ai saisie pour un seul des champs), et pas toujours là ou ça devrait être comme ça.

J'ai jamais utilisé le left join, peut être ça mon problème ...

par albat » 30 nov. 2006, 16:20

Déjà on va essayer d'y voir plus clair :
  • virer toutes les apostrophes (superflues sous MySQL)
  • utiliser des alias de tables
On découvre alors qu'il y a un 'fields' de trop just avant le ON de ta jointure.

Code : Tout sélectionner

SELECT Q.Id, Q.Libelle, Q.Titre, E.Note FROM qual_eval_fields Q, qual_evaluations E, qual_organismes O, qual_forms F LEFT JOIN qual_evaluations ON (qual_eval_fields.Id=qual_evaluations.FieldId) WHERE E.OrgaId = O.Id AND E.FormId = F.Id AND F.Id = 1 GROUP BY Q.Id ORDER BY Q.Tri

jointures SQL

par mcorgnet » 30 nov. 2006, 15:57

Bonjour,

Dans la requête suivante, j'obtiens des valeurs nulles pour le quatrième champ dans mon SELECT, alors que certaines sont remplies. N'ayant pas l'habitude du LEFT JOIN, je fais appel à vous pour détecter mon erreur.

Vous y voyez qque chose ?

EDIT : je m'étais trompé dans la requête

Code : Tout sélectionner

SELECT `qual_eval_fields`.`Id` , `qual_eval_fields`.`Libelle` , `qual_eval_fields`.`Titre`, `qual_evaluations`.`Note` FROM `qual_eval_fields` , `qual_evaluations` , `qual_organismes` , `qual_forms` LEFT JOIN `qual_evaluations` `fields` ON (`qual_eval_fields`.`Id`=`qual_evaluations`.`FieldId`) WHERE `qual_evaluations`.`OrgaId` = `qual_organismes`.`Id` AND `qual_evaluations`.`FormId` = `qual_forms`.`Id` AND `qual_forms`.`Id`=1 GROUP BY `qual_eval_fields`.`Id` ORDER BY `qual_eval_fields`.`Tri`