Cte
遞歸 CTE 的案例是什麼?
我正在尋找為什麼要使用遞歸 CTE 的範例,但我在網路搜尋中發現的幾十個範例基本上減少到兩個:
- 生成序列
- 遍歷員工層次結構
我確實找到了一個使用遞歸 CTE 用逗號分割字元串的範例,這是迄今為止最有趣的(db<>fiddles: SQL Server,Postgres)。
是否存在基本上不是上述之一的遞歸 CTE 範例?
以下是三個不涉及生成序列或遍歷員工層次結構的應用程序:
Paul White 巧妙地使用了尋找不同的值。
遍歷員工層次結構
這是一種更廣泛類型的問題,稱為樹問題。與迭代相反,遞歸 CTE 擅長以更有效和更相關的方式解決樹問題。
展示父子關係的其他類似範例是製造業中的 BOM(物料清單)爆炸、祖先問題中的實際父子孫關係、任何其他層次結構問題等。樹問題有些普遍。遞歸 CTE 非常有用(在質量超過使用數量方面)。
查看 explainextended.com - 您可以使用 RECURSIVE CTE 玩棋盤遊戲、繪製立體圖和 Mandelbrot 集(以及其他分形)、解析生活遊戲中的各種模式、編寫 GIF 解碼器…… SQL 就像詩歌,一個只限於一個人的想像力!
複雜問題
您可以使用遞歸子查詢來解決數獨難題
甲骨文語法
with x( s, ind ) as ( select sud, instr( sud, ' ' ) from ( select '53 7 6 195 98 6 8 6 34 8 3 17 2 6 6 28 419 5 8 79' sud from dual ) union all select substr( s, 1, ind - 1 ) || z || substr( s, ind + 1 ) , instr( s, ' ', ind + 1 ) from x , ( select to_char( rownum ) z from dual connect by rownum <= 9 ) z where ind > 0 and not exists ( select null from ( select rownum lp from dual connect by rownum <= 9 ) where z = substr( s, trunc( ( ind - 1 ) / 9 ) * 9 + lp, 1 ) or z = substr( s, mod( ind - 1, 9 ) - 8 + lp * 9, 1 ) or z = substr( s, mod( trunc( ( ind - 1 ) / 3 ), 3 ) * 3 + trunc( ( ind - 1 ) / 27 ) * 27 + lp + trunc( ( lp - 1 ) / 3 ) * 6 , 1 ) ) ) select s from x where ind = 0
其他
我想你可以將它用於任何迭代過程,如曲線擬合。
但是,我發現將曲線擬合過程解除安裝到 R 之類的東西更有效。