sql >> Base de Datos >  >> RDS >> PostgreSQL

en postgres select, ¿devuelve una subconsulta de columna como una matriz?

Use la función agregada :

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

o un constructor de matrices de los resultados de una subconsulta:

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

La segunda opción es una consulta simple de una sola fuente, mientras que la primera es más genérica, especialmente conveniente cuando necesita más de un agregado de una tabla relacionada. Además, la primera variante debería ser más rápida en tablas más grandes.

Tenga en cuenta que para un mejor rendimiento, usr_id las columnas de ambas tablas deben indexarse. Mientras que normalmente users.usr_id es una clave principal, a veces uno puede olvidar que el índice de la columna de referencia también es útil.