#1 Tue 03 May 2022 17:20
- barthsdee
- Participant occasionnel
- Date d'inscription: 23 Aug 2011
- Messages: 45
[HELP] Jointure postgre
Bonjour,
Je suis un débutant POSTGRE et je coince sur une jointure de table:
J'ai une table A incluant 3 colonnes
- Source1
- Source2
- Source3
Les valeurs de ces trois colonnes font référence à une autre table b à deux colonnes
- idsource
- libsource
Si je tente
From a
Left join b on a.source1=b.idsource
Je peux dĂšs lors rapatrier l'information libsource dans ma base initiale
Mais je ne peux pas appliquer la mĂȘme mĂ©thode pour les colonnes Source 2 ET 3.
Je dois peut ĂȘtre utilisĂ© autre chose comme opĂ©rateur?
Hors ligne
#2 Tue 03 May 2022 17:52
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 323
Re: [HELP] Jointure postgre
J'ai l'impression que c'est ta table A qui est mal construite...
Tu peux nous expliquer plus concrĂštement ce que tu espĂšre obtenir de ta requĂȘte ( dans laquelle tu ne nous as pas prĂ©cisĂ© de SELECT)?
Notamment définir ce que représente Source 1, Source 2 et Source 3 et pourquoi c'est 3 colonnes différentes...
Hors ligne
#3 Wed 04 May 2022 08:43
- barthsdee
- Participant occasionnel
- Date d'inscription: 23 Aug 2011
- Messages: 45
Re: [HELP] Jointure postgre
Bonjour en fait c'est assez simple :
J'ai une base de données et je dois faire une vue concernant une douzaine de table,
quand il s'agit d'une jointure simple: ça passe
en revanche une des tables (appelons là table ETAT)va correspondre par exemple à une liste d'état (neuf , bon,médiocre...) elle est décomposée en deux colonnes un ID et le libellé
id => lib
01 => Bon
02 => Moyen
03 => Mauvais
Cette codification va pouvoir ĂȘtre appliquĂ©e plusieurs fois sur diffĂ©rents champs de la table mĂšre (MERE)
Dans la vue, j'essaye d'obtenir des données explicites : rapatrier les libellés correspondant pour les différents champs ou cela s'avÚre nécessaire
on obtient donc
select
...... (liste des champs Ă prendre
MERE.etat1
MERE.etat2 (les valeurs de etat1 etat2 et etat 3 sont des valeursdont la définition est comprise dans la table état (des id))
MERE.etat3
L'objectif est de remplacer les caleurs d'id par leur libellés (un peu à l'instar de ce que donnerait une recherche v sous excel)
si je souhaite rapatrier la valeur lib correspondant à un état je rajoute les lignes
ETAT.lib (dans la catégorie select)
et on a ensuite
from mere
[...]
LEFT join xx.ETAT on MERE.etat1 = ETAT.id
Le souci est qu'en faisant cela on crĂ©e une jointure sur la base du champ etat1 de la table mĂšre mais uniquement sur ce champ, seul le libellĂ© correspondant Ă cet Ă©tat pourra ĂȘtre rapatriĂ©.
PS: Rajouter des jointures pour les champs MERE.etat2 et MERE.etat3 ne marche pas
Hors ligne
#4 Wed 04 May 2022 10:54
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 323
Re: [HELP] Jointure postgre
Tu as réfléchis à passer par un CASE WHEN ?
Surtout si tu veux faire une vue derriÚre, tu peux caler ton case when directement dans la définition de la vue
Hors ligne
#5 Wed 04 May 2022 11:23
- barthsdee
- Participant occasionnel
- Date d'inscription: 23 Aug 2011
- Messages: 45
Re: [HELP] Jointure postgre
Je suis perdu sur le CASE WHEN (je suis vraiment un Noob)
J'ai pensé carrément changer les ID de la table état : les basculer de Integer vers du character varrying :dupliquer les valeurs de libellés au niveaux des ID et croiser les doigts pour que ma table mÚre répercute ces modifs
Hors ligne
#6 Wed 04 May 2022 11:44
Re: [HELP] Jointure postgre
Bonjour,
Si j'ai bien compris le besoin, il faut faire
Code:
SELECT m.id,e1.libelle AS etat1, e2.libelle AS etat2, e3.libelle AS etat3 FROM MERE m LEFT join xx.ETAT e1 on MERE.etat1 = ETAT.id LEFT join xx.ETAT e2 on MERE.etat2 = ETAT.id LEFT join xx.ETAT e3 on MERE.etat3 = ETAT.id
Jean-Marie
Azimut
Hors ligne
#7 Wed 04 May 2022 11:57
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 455
Re: [HELP] Jointure postgre
Je confirme la proposition de jmarsac
Une autre possibilitĂ© est de faire des sous-requĂȘtes mais moins efficace je pense (Ă vĂ©rifier).
Voir exemples :
http://sqlfiddle.com/#!5/99406/11/0
Hors ligne
#8 Thu 05 May 2022 11:38
- barthsdee
- Participant occasionnel
- Date d'inscription: 23 Aug 2011
- Messages: 45
Re: [HELP] Jointure postgre
Merci
Je confirme la chose
Concernant la partie jointure
Il faut créer les 3 liaisons en "nommant" à chaque fois la table exterieure d'une nouvelle variable (a,b,c...).
Coté Selection:
On rapatrie x fois la mĂȘme colonne mais via ces 3 liaisons. Pour Ă©viter les soucis, il va falloir nommer diffĂ©remment ces trois colonnes (avec as)
a.colonne as libéllé_1,
b.colonne as libéllé_2,
c.colonne as libéllé_3,
Dernière modification par barthsdee (Thu 05 May 2022 11:54)
Hors ligne
#9 Thu 05 May 2022 12:03
- tevrard
- Participant assidu
- Date d'inscription: 23 May 2016
- Messages: 323
Re: [HELP] Jointure postgre
Code:
SELECT m.id,e1.libelle AS etat1, e2.libelle AS etat2, e3.libelle AS etat3 FROM MERE m LEFT join xx.ETAT e1 on m.etat1 = e1.id LEFT join xx.ETAT e2 on m.etat2 = e2.id LEFT join xx.ETAT e3 on m.etat3 = e3.id
Au niveau de la gestion des alias, ça doit ĂȘtre plus clair comme ca.
Et dans ton Select, ça te permet de mieux sĂ©parer les choses et de comprendre plus facilement d'oĂč viennent les champs;
Ps : My bad , quand tu disais que tu avais essayer avec les jointures multiples, je pensais que c'était ce que tu avais fait
Dernière modification par tevrard (Thu 05 May 2022 12:04)
Hors ligne

