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 :

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);
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
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;
Le résultat est :

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