Resultados de MySQL como lista separada por comas
-
20-08-2019 - |
Pregunta
Necesito ejecutar una consulta como:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Pero me gustaría que la sub-selección devuelva una lista separada por comas, en lugar de una columna de datos. ¿Es esto posible, y si es así, cómo?
Solución
Puede usar GROUP_CONCAT para realizar eso, por ejemplo algo como
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;
Otros consejos
En lugar de usar group concat()
puede usar solo concat()
Select concat(Col1, ',', Col2) as Foo_Bar from Table1;
editar esto solo funciona en mySQL; Oracle concat solo acepta dos argumentos. En Oracle puede usar algo como select col1 || ',' || col2 || ',' || col3 como foobar de table1; en el servidor sql usaría + en lugar de tuberías.
En mi caso, tengo que concatenar todo el número de cuenta de una persona cuyo número de teléfono móvil es único. Así que he usado la siguiente consulta para lograr eso.
SELECT GROUP_CONCAT(AccountsNo) as Accounts FROM `tblaccounts` GROUP BY MobileNumber
El resultado de la consulta está debajo:
Accounts
93348001,97530801,93348001,97530801
89663501
62630701
6227895144840002
60070021
60070020
60070019
60070018
60070017
60070016
60070015