Resultados do SELECT separados por virgula
Estou compartilhando um recurso muito útil e nativo do postgres, assim como utilizamos o famoso RETORNA LISTA que o postgres também possui uma função nativa, e pode ser visualizado no link abaixo:
Podemos nos deparar com a necessidade de retornar resultados de um SELECT separados/concatenados por virgulas por exemplo, ou qualquer outro delimitador, abaixo veremos o comando em um exemplo bem genérico, e sua explicação:
Exemplo de uso:
SELECT ARRAY_TO_STRING(ARRAY(SELECT IDUSUARIO
FROM USUARIO_PAPELFUNCAO
WHERE IDPAPELFUNCAO = 25), ',')
FROM VERSAODB
Ou seja, perceba que nosso SELECT principal esta dentro de um ARRAY(Conjunto de dados ou Matriz), e logo após utilizamos o recurso no postgres ARRAY_TO_STRING que transforma o ARRAY criado em uma string, e informamos neste comando que nosso limitador será a virgula, podendo ser alterado conforme sua necessidade.
Retorno obtido:
31,2,36,12
Caso de uso:
Vamos supor que eu precisa de todos os usuários do papel função 25, já que somente esses podem colaborar em uma atividade em questão, porém, segundo levantado o usuário o qual iniciou o processo também poderá colaborar, sabendo que ele pode não ter o papel função 25, salvamos o Username deste usuário na variável /*USUARIO*/
SELECT ARRAY_TO_STRING(ARRAY(SELECT IDUSUARIO
FROM USUARIO_PAPELFUNCAO
WHERE IDPAPELFUNCAO = 25
UNION ALL
SELECT IDUSUARIO
FROM USUARIO
WHERE USERNAME = '/*USUARIO*/'), ',')
FROM VERSAODB
Perceba que neste caso, optei por fazer um union all dentro do array, assim o resultado será convertido e concatenado ao conjunto de resultado, existem outras formas de atender essa demanda, espero que tenha ajudado e que você possa adaptar os exemplos acima em seus processos / SQLs.