Question

Je dois exécuter une requête du type:

SELECT p.id, p.name, 
       (SELECT name 
          FROM sites s 
         WHERE s.id = p.site_id) AS site_list
  FROM publications p

Mais j'aimerais que la sous-sélection renvoie une liste séparée par des virgules, au lieu d'une colonne de données. Est-ce même possible, et si oui, comment?

Était-ce utile?

La solution

Vous pouvez utiliser GROUP_CONCAT pour l'exécuter, par exemple quelque chose comme

SELECT p.id, p.name, GROUP_CONCAT(s.name) AS site_list
FROM sites s
INNER JOIN publications p ON(s.id = p.site_id)
GROUP BY p.id, p.name;

Autres conseils

Au lieu d'utiliser group concat(), vous pouvez simplement utiliser concat()

Select concat(Col1, ',', Col2) as Foo_Bar from Table1;

modifier cela ne fonctionne que dans MySQL; Oracle concat n'accepte que deux arguments. Dans Oracle, vous pouvez utiliser quelque chose comme select col1 || ',' || col2 || ',' || col3 as foobar from table1; dans SQL Server, vous utiliseriez + au lieu de pipes.

Dans mon cas, je dois concaténer tout le numéro de compte d'une personne dont le numéro de portable est unique. J'ai donc utilisé la requête suivante pour y parvenir.

SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber

Le résultat de la requête est ci-dessous:

Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top