Bonsoir,
Je cherche la manière correcte d'obtenir une sélection sur 2 tables liées comportant un champ groupé, mais en conservant les cas où il peut être NULL. La base utilisée est PgSQL 9.1.
Voici un schéma et des données :
Voici la requête utilisée :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 CREATE TABLE "table_ref" ( id INTEGER primary key); CREATE TABLE "table_mesure" ( id INTEGER primary key, fk INTEGER REFERENCES "table_ref" (id), Type VARCHAR, Valeur NUMERIC); INSERT INTO "table_ref" (id) VALUES (1),(2),(3),(4); INSERT INTO "table_mesure" (id, fk, Type, Valeur) VALUES (1,1,'Hauteur',15), (2,1,'Longueur',25), (3,2,'Hauteur',10), (4,2,'Longueur',10), (5,2,'Largeur',10), (6,3,'Hauteur',10);
Le résultat est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT a.id, COALESCE((array_to_string(ARRAY(SELECT unnest(array_agg(b.Type|| ' : ' || b.Valeur))),'; ')), 'vide') AS mesures FROM "table_ref" AS "a", "table_mesure" AS "b" WHERE a.id = b.fk GROUP BY a.id;
id |mesures
1 |"Hauteur : 15; Longueur : 25"
2 |"Hauteur : 10; Longueur : 10; Largeur : 10"
3 |"Hauteur : 10"
Alors que je voudrais garder tous les a.id, cf. :
id |mesures
1 |"Hauteur : 15; Longueur : 25"
2 |"Hauteur : 10; Longueur : 10; Largeur : 10"
3 |"Hauteur : 10"
4 |"vide"
Cdlt,
Nafai
Partager