web-dev-qa-db-fra.com

Résultats MySQL sous forme de liste séparée par des virgules

J'ai besoin d'exécuter une requête comme celle-ci:

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?

113
Glen Solsberry

Vous pouvez utiliser GROUP_CONCAT pour le faire, 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;
234
Paul Dixon

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.

9
Robert Quinn

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
3
Vignesh Chinnaiyan