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

1つのクエリで別のテーブルから取得したテーブルのリストをUNIONするにはどうすればよいですか?

    これを自動化するには、動的SQLが必要です

    CREATE OR REPLACE FUNCTION f_multi_select()
      RETURNS SETOF table1
      LANGUAGE plpgsql AS
    $func$
    BEGIN
       RETURN QUERY EXECUTE
       (
       SELECT string_agg(format('SELECT * FROM %I', tbl), ' UNION ALL ')
       FROM   (SELECT tbl FROM tablenames ORDER BY id) sub
       );
    END
    $func$;
    

    電話:

    SELECT * FROM f_multi_select();
    

    すべてのテーブルが同じ行タイプを共有していると仮定すると、関数の戻りタイプを定義するために任意のテーブルを選択できます。

    ORDER BYを使用してサブクエリをスローしました -テーブルの順序に意味がある場合。

    関連:



    1. Javaで例外処理メソッドとして使用されるmysql固有のインデックス

    2. transaction.wasCommitted()がfalseを返すのはなぜですか?

    3. COUNTSQL関数のパフォーマンス

    4. Oracleで曜日名の正しいパディングを削除する方法