Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai créé une vue à partir de 10 tables.
Ayant utilisé le constructeur graphique de requête de pgAdminIII, j'ai obtenu ceci :
SELECT
table1.champ1,
table2.champ1,
table2.champ2,
table3.champ1,
table4.champ1,
table4.champ2,
table4.champ3,
table5.champ1,
table6.champ1,
table7.champ1,
table8.champ1,
table9.champ1,
table10.champ1,
table10.champ2
FROM
public.table2,
public.table10,
public.table1,
public.table8,
public.table5,
public.table4,
public.table3,
public.table6,
public.table7,
public.table9
WHERE
table2.champ3 = table1.champ2 AND
table2.champ4 = table8.champ6 AND
table2.champ1 = table6.champ1 AND
table2.champ2 = table7.champ2 AND
table10.champ2 = table2.champ2 AND
table8.champ3 = table5.champ2 AND
table5.champ5 = table4.champ3 AND
table3.champ4 = table5.champ3
Ça marche parfaitement, mais j'aurais préféré utiliser des JOIN à la place des WHERE, histoire d'optimiser les performances.
Mais impossible de trouver la syntaxe correcte pour les JOIN sur 10 tables !
Merci de votre aide...
Hors ligne
Bonjour,
la syntaxe des join est la suivante :
SELECT ...
FROM table1
JOIN table2 ON table1.champ2 = table2.champ3
JOIN table8 ON table8.champ6 = table2.champ4
JOIN ...
Cependant, vous ne gagnerez pas en performance sous postgresql en remplaçant les FROM par des WHERE (vous pouvez comparer les plans d'exécution), sauf éventuellement si vous changez l'ordre des jointures.
Julien.
https://rjuju.github.io/
Hors ligne
ok, je crois comprendre d'où vient mon problème : en fait, les JOIN font partie de la section FROM, donc :
- il ne peut pas y avoir la même table dans le FROM et dans les JOIN.
- il ne peut pas y avoir 2 fois la même table dans les JOIN.
- je ne peux pas faire référence à une table dans les ON si elle n'est pas déjà déclarée dans le FROM ou les JOIN.
Vous me confirmez ?
Hors ligne
Vous pouvez avoir la même table dans le FROM et dans le JOIN, ou dans deux JOIN. Par contre, vous devez donner un alias à au moins une des deux tables pour que PostgreSQL puisse faire la différence.
Par contre, je confirme qu'on ne peut pas faire référence à une table dans la partie ON si elle n'a pas été indiquée dans le FROM ou un JOIN précédent.
Guillaume.
Hors ligne
Merci ! Les JOIN sont beaucoup, beaucoup plus clair pour moi maintenant. Et ma requête fonctionne parfaitement
Une seule remarque : je suis surpris que le constructeur graphique de pgAdminIII génère du code avec des WHERE !
Bonne journée...
Hors ligne
Vous voulez dire en n'utilisant pas de JOIN je suppose ? c'est une amélioration qu'on souhaiterait apporter au constructeur graphique. Il est dans la TODO list. Si vous avez des connaissances en C++, n'hésitez pas à proposer un patch.
Guillaume.
Hors ligne
Pages : 1