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).