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

i postgres select, returnere en kolonneunderforespørgsel som en matrix?

Brug aggregerfunktionen :

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

eller en array-konstruktør fra resultaterne af en underforespørgsel:

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

Den anden mulighed er en simpel en-kilde-forespørgsel, mens den første er mere generisk, især praktisk, når du har brug for mere end ét aggregat fra en relateret tabel. Den første variant skulle også være hurtigere på større borde.

Bemærk, at usr_id for bedre ydeevne kolonner i begge tabeller skal indekseres. Mens det typisk er users.usr_id er en primær nøgle, nogle gange kan man glemme, at indekset for referencekolonnen også er nyttigt.



  1. multiparameter fejl med datetime_select

  2. Syntaksfejl ved brug af afgrænsere med Aurora Serverless MySQL 5.6

  3. Indstil mySQL MAX-værdi til java-variabel

  4. CV for XID hævet 0:ukendt