sql >> データベース >  >> RDS >> PostgreSQL

1対多に参加して、単一の結果を取得します

    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を使用することは賢明ではありません。 列名として。これは予約語 です。 すべてのSQL標準およびPsotgreSQLの型名。

    ID列にidという名前を付けるのもアンチパターンです。 。説明的ではなく、役に立たない。 (多くの)可能な命名規則の1つは、主キーであるテーブルにちなんで名前を付けることです:table_a_id 。それを参照する外部キーの同じ名前(他の自然名が優先されない場合)。



    1. SQLServerでOVER句とPARTITIONBY句を使用して現在の合計を計算する

    2. PHPメールのダイナミックHTMLテーブル

    3. SQLクエリ:最新のNを除くすべてのレコードをテーブルから削除しますか?

    4. MySQLでコンマ区切りフィールドを複数の行に展開する方法