PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Присъединете се към един към много и извлечете един резултат

По-просто, по-кратко, по-бързо с 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 . Същото име за външните ключове, които го препращат (ако няма друго естествено име с предимство).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Диалектът трябва да бъде изрично предоставен от v4.0.0

  2. Оптимизирайте заявката GROUP BY, за да извлечете последния ред на потребител

  3. Кортежите не се вмъкват последователно в таблицата на базата данни?

  4. Извличане на данни от PostgreSQL DB без използване на pg_dump

  5. Променете реда на колоните в таблицата на postgre