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

WITH RECURSIVEQueryPostgresに関する考えられる説明

    これは共通テーブル式と呼ばれ、SQLで再帰クエリを表現する方法です:

    t(n) CTEの名前をtとして定義します 、nという名前の単一の列 。これは、派生テーブルのエイリアスに似ています:

    select ... 
    from (
      ...
    ) as t(n);

    再帰は値1(つまり、values (1)から始まります。 パート)そして、99に達するまで再帰的に1を追加します。したがって、1から99までの数値が生成されます。次に、最後のクエリでそれらすべての数値が合計されます。

    n は列名であり、ではありません 「変数」と「割り当て」は、他のデータ取得と同じ方法で行われます。

    WITH RECURSIVE t(n) AS (
        VALUES (1) --<< this is the recursion "root"
      UNION ALL
        SELECT n+1 FROM t WHERE n < 100 --<< this is the "recursive part"
    )
    SELECT sum(n) FROM t;
    

    再帰を「展開」すると(実際には反復です)、次のようになります。

    select x.n + 1
    from (
      select x.n + 1
      from (
        select x.n + 1
        from (
          select x.n + 1
          from (
             values (1)
          ) as x(n) 
        ) as x(n)
      ) as x(n)
    ) as x(n)
    

    マニュアルの詳細:
    https:// www .postgresql.org / docs / current / static / queries-with.html



    1. mysqlはint列を外部キーを使用してbigintに変更します

    2. PostgreSQLで2つの日付間の時系列を生成する

    3. 大規模なデータセットを使用した1回限りのクエリでのMySQLパフォーマンスの向上

    4. JavaでStatement(CallableStatement)を印刷する方法は?