PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

dans postgres select, renvoie une sous-requête de colonne sous forme de tableau ?

Utilisez la fonction d'agrégation :

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

ou un constructeur de tableau à partir des résultats d'une sous-requête :

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 deuxième option est une simple requête à source unique tandis que la première est plus générique, particulièrement pratique lorsque vous avez besoin de plusieurs agrégats à partir d'une table associée. De plus, la première variante devrait être plus rapide sur les grandes tables.

Notez que pour de meilleures performances, le usr_id les colonnes des deux tables doivent être indexées. Alors que généralement users.usr_id est une clé primaire, on peut parfois oublier que l'index de la colonne de référence est aussi utile.