Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oubliĂ© ?

#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

jmarsac
Participant assidu
Lieu: NICE
Date d'inscription: 26 Oct 2005
Messages: 579
Site web

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

 

Pied de page des forums

Copyright Association GeoRezo