sql >> Database >  >> RDS >> PostgreSQL

in postgres select, een kolomsubquery retourneren als een array?

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.



  1. Heeft Oracle een ingebouwde hashfunctie?

  2. Alles wat u moet weten over coderingsstandaarden voor SQL-query's

  3. Hoe een primaire sleutel opnieuw ordenen?

  4. Hoe een integer-uitvoer van een SQL-query te krijgen