PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

no postgres select, retorna uma subconsulta de coluna como uma matriz?


Use a função agregada :
select
    usr_id, 
    name, 
    array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name

ou um construtor de array dos resultados de uma subconsulta:
select
    u.usr_id, 
    name, 
    array(
        select tag_id 
        from tags t 
        where t.usr_id = u.usr_id
        ) as tag_arr
from users u

A segunda opção é uma consulta simples de uma fonte, enquanto a primeira é mais genérica, especialmente conveniente quando você precisa de mais de uma agregação de uma tabela relacionada. Além disso, a primeira variante deve ser mais rápida em tabelas maiores.

Observe que, para melhor desempenho, o usr_id colunas em ambas as tabelas devem ser indexadas. Embora normalmente users.usr_id é uma chave primária, às vezes pode-se esquecer que o índice da coluna de referência também é útil.