PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

in postgres select eine Spaltenunterabfrage als Array zurückgeben?

Verwenden Sie die Aggregatfunktion :

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

oder ein Array-Konstruktor aus den Ergebnissen einer Unterabfrage:

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

Die zweite Option ist eine einfache Abfrage aus einer Quelle, während die erste generischer ist, was besonders praktisch ist, wenn Sie mehr als ein Aggregat aus einer verknüpften Tabelle benötigen. Außerdem sollte die erste Variante auf größeren Tischen schneller sein.

Beachten Sie, dass für eine bessere Leistung die usr_id Spalten in beiden Tabellen sollten indiziert werden. Während normalerweise users.usr_id ein Primärschlüssel ist, kann man manchmal vergessen, dass der Index der referenzierenden Spalte auch nützlich ist.