Merger les resultats d'une jointure multiple
Résolu
Exileur
Messages postés
1621
Statut
Membre
-
Exileur Messages postés 1621 Statut Membre -
Exileur Messages postés 1621 Statut Membre -
Hello Hello,
Me voila bien en galére sur postgres dont je ne suis pas specialement famillier ...
J'ai trois tables:
Je souhaite que le résultat de ma jointure ressemble à ça mais impossible d'y parvenir :
Voila la commande que j'utilise et son résultat :
En mysql j'aurai utilisé GROUP_CONCAT mais qui n'est pas une fonction postgres valide.
j'ai tenté le GROUP BY clients.name mais il me sors une erreur et veux que je rajoute égallement le champ products.name du coup il me fait juste une sorte de ORDER_BY mais ne concaténe pas les résultats
j'ai tenté un SELECT DISTINCT(clients.name) mais il me sort uniquement le premier produit commandé par l'utilisateur....
Je commence à secher et mes connaissances postgres sont trop faible.
Un connaisseur peut il m'aider ? :)
Merci d'avance
Me voila bien en galére sur postgres dont je ne suis pas specialement famillier ...
J'ai trois tables:
Table clients
+----+-------+
| id | name |
+----+-------+
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+----+-------+
Table products
+----+----------+
| id | name |
+----+----------+
| 1 | service1 |
| 2 | service2 |
| 3 | service3 |
| 4 | service4 |
+----+----------+
Table commands
+----+-----------+------------+
| id | id_client | id_product |
+----+-----------+------------+
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
| 4 | 2 | 3 |
| 5 | 3 | 4 |
+----+-----------+------------+
Je souhaite que le résultat de ma jointure ressemble à ça mais impossible d'y parvenir :
Résultat attendu
+--------+------------------------------+
| USER | PRODUCT(S) |
+--------+------------------------------+
| user1 | service1, service2 |
| user2 | service1, service3 |
| user3 | service4 |
| user4 | service1, service2, service3 |
+--------+------------------------------+
Voila la commande que j'utilise et son résultat :
SELECT users.name as "USER", products.name as "PRODUCT(S)"
FROM users
LEFT JOIN commands ON users.id = commands.id_client
INNER JOIN products ON commands.id_product = products.id
ORDER BY users.name ASC;
Résultat obtenue
+-------+------------+
| USER | PRODUCT(S) |
+-------+------------+
| user1 | service1 |
| user1 | service2 |
| user2 | service1 |
| user2 | service3 |
| user3 | service4 |
etc...
En mysql j'aurai utilisé GROUP_CONCAT mais qui n'est pas une fonction postgres valide.
j'ai tenté le GROUP BY clients.name mais il me sors une erreur et veux que je rajoute égallement le champ products.name du coup il me fait juste une sorte de ORDER_BY mais ne concaténe pas les résultats
j'ai tenté un SELECT DISTINCT(clients.name) mais il me sort uniquement le premier produit commandé par l'utilisateur....
Je commence à secher et mes connaissances postgres sont trop faible.
Un connaisseur peut il m'aider ? :)
Merci d'avance
A voir également:
- Merger les resultats d'une jointure multiple
- Resultats foot - Télécharger - Vie quotidienne
- Ecran multiple pc - Guide
- Excel cellule choix multiple - Guide
- Lexer resultats - Télécharger - Sport
- Copier coller multiple - Guide
2 réponses
Bonjour,
je ne connais pas du tout, mais ceci semble répondre à ta problématique :
https://www.postgresqltutorial.com/postgresql-aggregate-functions/postgresql-array_agg-function/
A+
je ne connais pas du tout, mais ceci semble répondre à ta problématique :
https://www.postgresqltutorial.com/postgresql-aggregate-functions/postgresql-array_agg-function/
A+
Exileur
Messages postés
1621
Statut
Membre
150
Merci pour ta réponse, je vais me cultiver un peu plus et lire ce que tu m'a envoyé !!
Bon, il a suffit que je pose la question ici pour trouver la réponse ....
Voila ce que j'utilise comme commande pour obtenir le résultat attendu :
Je clos la demande qui est résolue.
Voila ce que j'utilise comme commande pour obtenir le résultat attendu :
SELECT users.name as "USER", string_agg(DISTINCT products.name, ', ') as "PRODUCT(S)"
FROM users
LEFT JOIN commands ON users.id = commands.id_client
INNER JOIN products ON commands.id_product = products.id
GROUP BY users.name
ORDER BY users.name ASC;
+--------+------------------------------+
| USER | PRODUCT(S) |
+--------+------------------------------+
| user1 | service1, service2 |
| user2 | service1, service3 |
| user3 | service4 |
| user4 | service1, service2, service3 |
+--------+------------------------------+
Je clos la demande qui est résolue.