sql >> Databáze >  >> RDS >> PostgreSQL

v postgres select vrátí poddotaz sloupce jako pole?

Použijte agregační funkci :

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

nebo konstruktor pole z výsledků dílčího dotazu:

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

Druhou možností je jednoduchý dotaz z jednoho zdroje, zatímco první je obecnější, zvláště výhodný, když potřebujete více než jeden agregační soubor ze související tabulky. Také první varianta by měla být rychlejší na větších stolech.

Všimněte si, že pro lepší výkon usr_id sloupce v obou tabulkách by měly být indexovány. Zatímco obvykle users.usr_id je primární klíč, někdy se může zapomenout, že index referenčního sloupce je také užitečný.



  1. PostgreSQL Ukládání a vybírání souborů pomocí binárních dat Bytea s knihovnou C libpq

  2. Vrácení jednotlivých hodnot null pomocí postgres tablefunc crosstab()

  3. Jak nainstalovat a zabezpečit MariaDB na Ubuntu

  4. příkazového řádku přihlášení jako jiný uživatel