Eu preciso executar uma consulta como:
SELECT p.id, p.name,
(SELECT name
FROM sites s
WHERE s.id = p.site_id) AS site_list
FROM publications p
Mas eu gostaria que a sub-seleção retornasse uma lista separada por vírgula, em vez de uma coluna de dados. Isso é possível e, em caso afirmativo, como?
sql
mysql
concatenation
Glen Solsberry
fonte
fonte
GROUP_CONCAT(CAST(s.name AS CHAR))
; caso contrário, ele retornará algo totalmente inútil[BLOB - 20 Bytes]
.Em vez de usar,
group concat()
você pode usar apenasconcat()
editar isso funciona apenas no mySQL; O Oracle concat aceita apenas dois argumentos. No oracle, você pode usar algo como select col1 || ',' || col2 || ',' || col3 como foobar da tabela1; no servidor sql, você usaria + em vez de pipes.
fonte
Agora só me deparei com essa situação e encontrei alguns recursos mais interessantes por aí
GROUP_CONCAT
. Espero que esses detalhes façam você se sentir interessante.GROUP_CONCAT simples
Resultado:
GROUP_CONCAT com DISTINCT
Resultado:
GROUP_CONCAT com DISTINCT e ORDER BY
Resultado:
GROUP_CONCAT com DISTINCT e SEPARATOR
Resultado:
GROUP_CONCAT e combinando colunas
Resultado:
GROUP_CONCAT e resultados agrupados Suponha que os seguintes sejam os resultados antes de usar
GROUP_CONCAT
Resultado:
fonte
No meu caso, tenho que concatenar todo o número da conta de uma pessoa cujo número de celular é único. Então, eu usei a seguinte consulta para conseguir isso.
O resultado da consulta está abaixo:
fonte