По-просто, по-кратко, по-бързо с 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
Подробности, обяснение, бенчмарк и връзки в този тясно свързан отговор
.
Използвам LEFT JOIN
, така че редовете от table_a
без съответстващ ред в table_b
не се изпускат.
Странични бележки:
Въпреки че е разрешено в PostgreSQL, не е разумно да се използва date
като име на колона. Това е запазена дума
във всеки SQL стандарт и име на тип в PsotgreSQL.
Също така е анти-модел за именуване на ID колона id
. Не е описателно и не е полезно. Една (от многото) възможни конвенции за именуване би била да го наименувате след таблицата, където е първичен ключ:table_a_id
. Същото име за външните ключове, които го препращат (ако няма друго естествено име с предимство).