Résultats MySQL en tant que liste séparée par des virgules

J’ai besoin d’exécuter une requête comme:

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 le sous-sélection retourne une liste séparée par des virgules, au lieu d’une colonne de données. Est-ce que c’est possible, et si oui, comment?

Vous pouvez utiliser GROUP_CONCAT pour effectuer cela, 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; 

Au lieu d’utiliser le group concat() vous pouvez utiliser juste concat()

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

modifier cela ne fonctionne que dans mySQL; Oracle concat accepte uniquement deux arguments. Dans oracle, vous pouvez utiliser quelque chose comme select col1 || ‘,’ || col2 || ‘,’ || col3 comme foobar de table1; dans le serveur SQL, vous utiliseriez + au lieu de tuyaux.

Dans mon cas, je dois concaténer tout le numéro de compte d’une personne dont le numéro de téléphone 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