単一のクエリで複数の CTE を組み合わせることは可能arel
ですか? 私はこのような結果を得る方法を探しています:
WITH cte1 AS (
...
),
WITH RECURSIVE cte2 AS (
...
),
WITH cte3 AS (
...
)
SELECT ... FROM cte3 WHERE ...
ご覧のとおり、1 つの再帰 CTE と 2 つの非再帰 CTE があります。
単一のクエリで複数の CTE を組み合わせることは可能arel
ですか? 私はこのような結果を得る方法を探しています:
WITH cte1 AS (
...
),
WITH RECURSIVE cte2 AS (
...
),
WITH cte3 AS (
...
)
SELECT ... FROM cte3 WHERE ...
ご覧のとおり、1 つの再帰 CTE と 2 つの非再帰 CTE があります。
キーワードを上部WITH
に 1 回使用します。共通テーブル式 (CTE) のいずれかが再帰的 (rCTE)である場合は、すべての CTE が再帰的であるとは限りませんが、最初RECURSIVE
にキーワードを追加する必要があります。
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
大胆強調鉱山。そして、さらに洞察力があります:
のもう 1 つの効果
RECURSIVE
は、WITH
クエリを順序付けする必要がないことです。クエリは、リストの後半にある別のクエリを参照できます。(ただし、循環参照または相互再帰は実装されていません。) を使用しないRECURSIVE
場合、クエリはリスト の前にあるWITH
兄弟クエリのみを参照できます。WITH
WITH
再び大胆な強調鉱山。キーワードが使用されている場合、WITH
句の順序は無意味であることを意味します。RECURSIVE
ところで、この例では と は外部で参照されておらず、cte1
それ自体が単純なコマンドであるため (付随的な影響はありません)、実行されることはありません ( で参照されている場合を除きます)。cte2
SELECT
SELECT
cte3
はい。を繰り返さないでくださいWITH
。コンマを使用するだけです:
WITH cte1 AS (
...
),
cte2 AS (
...
),
cte3 AS (
...
)
SELECT ... FROM 'cte3' WHERE ...
And: 文字列定数と日付定数には単一引用符のみを使用します。列のエイリアスには使用しないでください。いずれにしても、CTE 名には使用できません。