Gebruik de aggregaatfunctie :
select
usr_id,
name,
array_agg(tag_id) as tag_arr
from users
join tags using(usr_id)
group by usr_id, name
of een array-constructor uit de resultaten van een subquery:
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
De tweede optie is een eenvoudige query uit één bron, terwijl de eerste meer generiek is, vooral handig wanneer u meer dan één aggregaat uit een gerelateerde tabel nodig hebt. Ook zou de eerste variant sneller moeten zijn op grotere tafels.
Merk op dat voor betere prestaties de usr_id
kolommen in beide tabellen moeten worden geïndexeerd. Terwijl meestal users.usr_id
is een primaire sleutel, soms vergeet men dat de index van de verwijzende kolom ook nuttig is.