WITH
を使用した再帰クエリ のドキュメントで、これを見つけることができます
再帰クエリは通常、階層データまたはツリー構造のデータを処理するために使用されます。
これは本当のようですが、これは RECURSIVE VIEW
sでどのように機能しますか?再帰ビューでは、ビューの呼び出し元からエッジケースを定義することはできません。プランナーがそのエッジケースを押し下げる機会もありません。
たとえば、このクエリを取ります
WITH RECURSIVE t(name, groupid, parentid) AS(
SELECT name,groupid,parentid
FROM rl.groups
WHERE groupid = 2 -- this defines the Edge case
UNION
SELECT groups.name, groups.groupid, groups.parentid
FROM rl.groups AS groups, t
WHERE groups.groupid = t.parentid
)
SELECT * FROM t;
これにより、グループ2、およびそのグループのすべての親とその親が表示されます。しかし、どうすればそれを便利なRECURSIVE VIEW
にすることができますか?私が知る限り、あなたはできません。そして、それは階層的でツリー構造のデータのユースケースを排除します。その時、彼らは何のために良いのでしょうか?再帰的な数学的シーケンスを構築するだけですか?
再帰ビューは、再帰CTEの単なる構文糖衣です。
create or replace recursive view foo (name, groupid, parentid) as
select name, groupid,parentid from rl.groups where groupid=2
union
SELECT groups.name, groups.groupid, groups.parentid
FROM rl.groups AS groups, foo
WHERE groups.groupid = foo.parentid ;
あなたのCTEと同じです。
CTEをパラメーター化する場合は、それを関数でラップします。