Eu tenho uma tabela de pessoas: id, person_name
Eu tenho uma tabela de tags: id, tag_name
existe uma tabela de junção para as tags que conecta pessoas e tags: id, person_id, tag_id
Eu tenho uma consulta para obter um grupo de pessoas com base em diferentes critérios de pesquisa, por isso está sendo construído dinamicamente e o que eu gostaria de fazer é dentro dessa consulta - para cada pessoa - gostaria de poder pegar toda a tag nomes associados com essa pessoa. Eu gostaria de pegar todas as tags associadas e colocá-las em uma coluna para cada linha de pessoa (de preferência como uma matriz ou objeto). Qual é o padrão geral para poder retornar um grupo de coisas como uma coluna ao percorrer linhas como esta. Estou tendo problemas para descobrir o que procurar para encontrar uma resposta generalizada online. Estou usando o postgres.
Como outros já mencionaram, seu objetivo é desnormalizar os dados e não é um caso de uso comum para um sistema de banco de dados relacional, mas certamente é alcançável. Portanto, se você realmente deseja fazer isso, o que você deseja no Google é algo como " PostgreSQL concatenate multiple rows ". O objetivo geralmente é criar uma lista de valores separados por vírgula ( CSV ou algo de estrutura semelhante).
Fazer isso realmente me levou a esta resposta do StackOverflow sobre o uso da
string_agg()
função no PostgreSQL.Para referência histórica, aqui está o exemplo de Erwin da resposta do StackOverflow acima mencionada, aproveitando
string_agg()
para compactar váriosActor
valores em um único campo porMovie
linha em uma tabela deMovies
:No seu caso, você gostaria de ir para a sua
JOIN
mesa (através da sua tabela de junção). Do exemplo acima seria equivalente ao seu campo e seria equivalente ao seu campo. Uma consulta provavelmente semelhante a esta é o que você está procurando:people
tags
movie
person_name
actor
tag_name