Vous n'êtes pas identifié(e).
Bonjour @ tous.
Je sais que je vous sollicite beaucoup en ce moment, mais si vous étiez moins bon dans vos réponses il est fort probable que je vous demande moins de choses ;-)
Aujourd'hui, j'essaie une fois de plus d'innover en voulant réaliser un relace avec des valerurs sources et destination issues d'une autre table, je m'explique :
1- J'ai une table1 qui contient une liste d'id associée à un nom
id | nom
-----------------
1 | coucou
2 | chouette
3 | hibou
2- J'ai une table2 qui contient un champ varchar[] qui contient le résultat de cette table 1
id | champ1
----------------
10 | {3,2}
20 | {3,1,2}
3- Ce que je souhaite faire, c'est faire apparaitre avec ma requête les vrais valeurs (issues de la table1) associées au numéro de la table2 :
id | resultat
-------------------------------
10 | hibou,chouette
20 | hibou,coucou,chouette
Pour ça, j'ai déjà testé sur un numéro en particulier :
select replace(replace(replace(array(SELECT unnest(champ1) from table2 where id=10)::varchar,'{',''),'}',''),foo.id,foo.nom) FROM (SELECT id::varchar,nom FROM table1)foo;
Le problème c'est que le résultat apparait sous la forme suivante :
id | resultat
-------------------------------
10 | "hibou,2"
10 | "1,chouette"
Est-ce que vous avez une solution pour ce genre de problèmatique ?
Par avance merci de votre aide.
Geo-x
Hors ligne
Bonjour,
pourquoi varchar[] et pas integer[] ?
sinon, cette requête devrait marcher :
SELECT t2.id, string_agg(t1.nom,',')
FROM (SELECT id, unnest(champ1) as ref FROM table2) t2
JOIN table1 t1 ON t2.ref::integer = t1.id
group by 1;
Julien.
https://rjuju.github.io/
Hors ligne
Bonjour rjuju.
En fait, c'est la configuration de notre logiciel qui impose ce genre de contrainte par rapport au type de champ.
Sinon la requête est parfaite et très intéressante d'un point de vue technique !
Ceci m'emmène à une autre question, quand vous faites "group by 1" ça veut dire qu'il y a un GROUP BY sur le premier champ appellé dans le SELECT ?
Hors ligne
Oui, c'est ça.
Ce n'est d'ailleurs pas forcément une bonne chose à faire pour la requête finale. Vous pouvez donc remplacer par "group by t2.id".
Julien.
https://rjuju.github.io/
Hors ligne