#1 Tue 22 June 2021 10:59
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Jointure imbriquée sur une même table
Bonjour,
J'ai deux tables :
Table an_voie : | Table an_tenant
id_voie | id_tenant
denom | id_voie (identifiant de ma voie actuelle)
cote | id_voie_te (identifiant de ma voie tenante)
geom | complement (infos complementaires)
Comme on peut le voir, la table an_tenant est une traduction d'un modèle N,N sur la même table des voies pour les gestion des tenants.
J'ai le même principe pour les aboutissants. En effet, une voie peut avoir plusieurs tenants ou aboutissants (cas du Y pas exemple).
A travers une vue, je cherche à récupérer des informations sur ma table an_voie, ainsi que le ou les tenants associé(s) à cette voie.
J'ai tout d'abord essayé en relation 0;1 et j'arrive à sortir l'identifiant id_voie_te sur ma table an_tenant, mais impossible d'aller afficher le nom de la voie qui correspond à cet ID situé sur la table an_voie.....
Comment pourrais-je réaliser cela ? Je suppose que mon problème vient de mes imbrications de jointures, mais je n'arrive pas à me corriger.
Mon test actuel :
SELECT
v.id_voie,v.denom, p1.valeur || ' '|| v1.denom as voie_tenante, t.id_voie_te
FROM rva.an_voie v
LEFT JOIN rva.an_tenant t ON t.id_voie = v.id_voie
LEFT JOIN rva.an_voie v1 ON t.id_voie = v1.id_voie
LEFT JOIN rva.lt_prefixe_voie p1 ON p1.code = v1.prefixe
GROUP BY v.id_voie, v.denom, p1.valeur || ' '|| v1.denom, id_voie_te;
Il me sort bien l'ID de ma voie tenante, mais dans v1.denom, il me sort la denomination de ma voie actuelle....
Idéalement, je devrais une fois ce problème résolu, réaliser une sorte d'imbrication pour concaténer toutes les voies tenantes liés (cas où plus de 1 voie tenante)
Ou plutôt fonctionner autrement, en plusieurs sous requêtes WITH ? Je vais chercher sur ma table an_tenant les noms des voies tenantes, je fais un groupement par ID de voie principale pour concaténer toutes les dénominations des voies tenantes, puis je greffe cela à ma requête principale ?
En vous remerciant (et en espérant avoir été synthétique et clair dans mes explications ),
Léandre
Hors ligne
#2 Tue 22 June 2021 11:15
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Re: Jointure imbriquée sur une même table
Je me corrige seul.
Mon erreur est ici :
SELECT
v.id_voie,v.denom, p1.valeur || ' '|| v1.denom as voie_tenante, t.id_voie_te
FROM rva.an_voie v
LEFT JOIN rva.an_tenant t ON t.id_voie = v.id_voie
LEFT JOIN rva.an_voie v1 ON t.id_voie_te = v1.id_voie
LEFT JOIN rva.lt_prefixe_voie p1 ON p1.code = v1.prefixe
GROUP BY v.id_voie, v.denom, p1.valeur || ' '|| v1.denom, id_voie_te;
Comment procéder ensuite d'après vous ?
Dernière modification par tweaxy (Tue 22 June 2021 11:15)
Hors ligne
#3 Tue 22 June 2021 11:23
- tweaxy
- Participant actif
- Lieu: Abbeville
- Date d'inscription: 27 Dec 2018
- Messages: 76
Re: Jointure imbriquée sur une même table
Cela semble fonctionner :
SELECT company_id, string_agg(employee, ', ')
FROM mytable
GROUP BY company_id;
Problème résolu donc.
Je ne sais pas en revanche au niveau des performances ce que l'imbrication de plusieurs sous requêtes WITH aura comme impact en BDD.
Cordialement,
Léandre
Hors ligne