キーワード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で参照されている場合を除く) 。