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

単一のクエリで複数のCTE

    キーワードWITHを使用する 1回 頂点で。 Common Table Expressions(CTE)のいずれかが再帰的(rCTE)である場合は、キーワードRECURSIVEを追加する必要があります。 上部に1回 また、すべてのCTEが再帰的でなくても:

    WITH RECURSIVE
      cte1 AS (...)         -- can still be non-recursive
    , cte2 AS (SELECT ...
               UNION ALL
               SELECT ...)  -- recursive term
    , cte3 AS (...)
    SELECT ... FROM cte3 WHERE ...
    

    マニュアル:

    RECURSIVEの場合 指定されている場合、許可 SELECT 名前で自分自身を参照するサブクエリ。

    大胆な強調鉱山。そして、さらに洞察力があります:

    RECURSIVEのもう1つの効果 そのWITH クエリを並べ替える必要はありません :クエリは、リストの後半にある別のクエリを参照できます。 (ただし、循環参照または相互再帰は実装されていません。)RECURSIVEなし 、WITH クエリは兄弟WITHのみを参照できます WITHの前のクエリ リスト。

    大胆な強調は再び私のものです。 WITHの順序を意味します 句は意味がありません RECURSIVEの場合 キーワードが使用されました。

    ところで、cte1以降 およびcte2 この例では、外側のSELECTでは参照されていません プレーンなSELECT コマンド自体(付随的な影響なし)、実行されることはありません(cte3で参照されている場合を除く) 。



    1. MySQLで2つの日付の間の日数を見つける方法

    2. now()関数から時間を減算します

    3. グループ別のSQLServer累積合計

    4. データは、sqliteのすべてのテーブルではなく、特定のテーブルの日付から入力されます