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

配列引数を使用して集合を返す関数を複数回呼び出す

    Postgres 9.3以降では、通常、 LEFT JOIN LATERAL ... ON trueを使用するのが最適です。

    SELECT sub.dataid, f.*
    FROM  (
       SELECT dataid, array_agg(data) AS arr
       FROM   dataset
       WHERE  dataid = something
       GROUP  BY 1
       ) sub
    LEFT   JOIN LATERAL foo(sub.arr) f ON true;
    

    関数foo()の場合 行なしを返すことができます 、これは、右側に行が返されない場合でも、結合の左側にあるすべての行を保持するため、安全な形式です。

    それ以外の場合、または必要な場合 横方向結合の結果がない行を除外するには、次を使用します:

    CROSS JOIN LATERAL foo(sub.arr)
    

    または速記:

    , foo(sub.arr)
    

    マニュアルには明確な言及があります。

    クレイグの関連する回答(ダニエルが参照)はそれに応じて更新されます:

    • SQLクエリで(func())。*構文を使用して複数の関数の評価を回避するにはどうすればよいですか?


    1. 異なる日付形式でCSVをMySQLにインポートする

    2. SQLServerCRUDの操作

    3. SQLServer2005のデータをExcelに転送またはエクスポートするにはどうすればよいですか

    4. データベースのセキュリティ-転送中および保存中のバックアップ暗号化