PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

in postgres select, restituisce una sottoquery di colonna come array?

Usa la funzione di aggregazione :

select
    usr_id, 
    name, 
    array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name

o un costruttore di array dai risultati di una sottoquery:

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

La seconda opzione è una semplice query da un'origine mentre la prima è più generica, particolarmente utile quando è necessario più di un aggregato da una tabella correlata. Inoltre, la prima variante dovrebbe essere più veloce su tavoli più grandi.

Nota che per prestazioni migliori il usr_id le colonne in entrambe le tabelle devono essere indicizzate. Mentre in genere users.usr_id è una chiave primaria, a volte si può dimenticare che anche l'indice della colonna di riferimento è utile.