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é ?

Annonce

Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).

En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.

#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 smile ),
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

 

Pied de page des forums

Powered by FluxBB