==DB2 再帰==
[[DB2]]{{category SQL}}
*[http://www-01.ibm.com/support/knowledgecenter/SSEPGG_10.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0059242.html?cp=SSEPGG_10.1.0%2F2-9-6-3-0-0&lang=ja 再帰の例: 部品表からのメモ]
*「'01' で示されている部品を作成するにはどの部品が必要か」という質問に答える
*直接の副部品、副部品の副部品などが入る
<<blockquote>>ある部品が何回も使用される場合でも、その副部品は 1 回しかリストに示されません<</blockquote>>
WITH RPL (PART, SUBPART, QUANTITY) AS
( SELECT ROOT.PART, ROOT.SUBPART, ROOT.QUANTITY
*サブコンポーネントが 1 回しかリストに現れないようになっています (これは SELECT DISTINCT を使用した結果です)
<<blockquote>>再帰的共通表式では、 無限ループ になる可能性を必ず考慮に入れてください<</blockquote>>
===要約正展開===
*部品 '01' の作成には各部品が合計どれくらい必要か
01 13 150
01 14 144
<<blockquote>>副部品が '06' の行に注目してください。 合計使用量の値 15 は、部品 '01' のための直接の数 3 と、 部品 '02' のための数 (6) に部品 '01' の数 (2) を掛けたものとを加えた数<</blockquote>>
===深さの制御===
FROM RPL PARENT, PARTLIST CHILD
WHERE PARENT.SUBPART = CHILD.PART
AND PARENT.LEVEL < < 2
)
SELECT PART, LEVEL, SUBPART, QUANTITY