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?

¿Fue útil?

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top