この表の中に存在する部品のレベルが、 とりあえず照会で必要なレベルより深い場合はどうなるのでしょうか。 つまり、 「'01' で指定される部品を作成するために必要な部品の最初の 2 つのレベルはどんなものか」 という質問に答えるためには、どんな照会を作成したらよいでしょうか。 例をわかりやすいものにするため、レベル番号を結果に含めることにします。
WITH RPL (LEVEL, PART, SUBPART, QUANTITY) AS ( SELECT 1, ROOT.PART, ROOT.SUBPART, ROOT.QUANTITY FROM PARTLIST ROOT WHERE ROOT.PART = '01' UNION ALL SELECT PARENT.LEVEL+1, CHILD.PART, CHILD.SUBPART, CHILD.QUANTITY FROM RPL PARENT, PARTLIST CHILD WHERE PARENT.SUBPART = CHILD.PART AND PARENT.LEVEL < 2 ) SELECT PART, LEVEL, SUBPART, QUANTITY FROM RPL;
この照会は例 1 に似ています。 元の部品からのレベルを示すために、列 LEVEL を使っています。 初期化全選択では、LEVEL 列の値を 1 に初期化しています。 それ以降の全選択では、親のレベルに 1 ずつ加算します。 次に、結果のレベル数を制御するため、2 番目の全選択に、 親のレベルが 2 未満でなければならないという条件を含めています。 これによって、2 番目の全選択では、 子の処理が第 2 レベルまでしか行われないことになります。
照会結果は、次のようになります。
PART LEVEL SUBPART QUANTITY -------- ----------- -------- ----------- 01 1 02 2 01 1 03 3 01 1 04 4 01 1 06 3 02 2 05 7 02 2 06 6 03 2 07 6 04 2 08 10 04 2 09 11 06 2 12 10 06 2 13 10