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?
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;
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