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

Připojte jeden k mnoha a načtěte jeden výsledek

Jednodušší, kratší, rychlejší s DISTINCT ON PostgreSQL :

SELECT DISTINCT ON (a.id)
       a.id, a.name, a.date, b.code1, b.code2
FROM   table_a a
LEFT   JOIN table_b b USING (id)
ORDER  BY a.id, b.sort

Podrobnosti, vysvětlení, benchmark a odkazy v této úzce související odpovědi .
Používám LEFT JOIN , takže řádky z table_a bez jakéhokoli shodného řádku v table_b nejsou vypuštěny.

Postranní poznámky:

I když je to povoleno v PostgreSQL, není rozumné používat date jako název sloupce. Je to rezervované slovo v každém standardu SQL a název typu v PsotgreSQL.

Je to také anti-vzor pro pojmenování sloupce ID id . Není popisný a není užitečný. Jednou (z mnoha) možných konvencí pojmenování by bylo pojmenovat jej podle tabulky, kde je primárním klíčem:table_a_id . Stejný název pro cizí klíče, které na něj odkazují (pokud žádný jiný přirozený název nemá přednost).



  1. Průchozí dotaz SQL Server jako základ pro sadu záznamů DAO v aplikaci Access

  2. Načte návratové hodnoty pole pl/sql v jazyce Java

  3. Echo v syntaxi heredoc / nowdoc

  4. Nelze nastavit velikost zásobníku vláken v mysql