sql >> Databasteknik >  >> RDS >> PostgreSQL

i postgres select, returnera en kolumnunderfråga som en array?

Använd aggregationsfunktionen :

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 arraykonstruktor från resultaten av en underfråga:

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

Det andra alternativet är en enkel fråga med en källa medan den första är mer generisk, särskilt praktiskt när du behöver mer än ett aggregat från en relaterad tabell. Dessutom bör den första varianten vara snabbare på större bord.

Observera att usr_id för bättre prestanda kolumner i båda tabellerna ska indexeras. Medan vanligtvis users.usr_id är en primärnyckel, ibland kan man glömma att indexet för referenskolumnen också är användbart.



  1. Tid- och datumstämpel i en MySQL-tabellrad

  2. hur man anropar en funktion i plsql-funktionen

  3. T-SQL Cast kontra Convert

  4. villkorlig gå med i mysql