PostgreSQLのDISTINCT ON
を使用すると、よりシンプル、短く、高速になります :
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
を使用することは賢明ではありません。 列名として。これは
ID列にid
という名前を付けるのもアンチパターンです。 。説明的ではなく、役に立たない。 (多くの)可能な命名規則の1つは、主キーであるテーブルにちなんで名前を付けることです:table_a_id
。それを参照する外部キーの同じ名前(他の自然名が優先されない場合)。