あなたの論理は基本的に大丈夫だったと思います。ここでは、2 つの改善点を示します。まず、レベルがインクリメンタルなので、再帰で何が起こるかを確認できます。次に、明示的な結合を使用します:
With BMStudy as (
select bm.ppn_i, bm.cpn_i, bm.bomname_i, bm.QUANTITY_I, 1 as BOMLevel
from BM010115 bm
where bm.PPN_I like '0123105-HWT' and bm.BOMNAME_I like ''
UNION ALL
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BMStudy ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like ''
)
select * from BMStudy;
あなたの問題は where bb.BOMNAME_I like ''
という条件だと思います .この値が本当に NULL
である可能性はありますか? 空白ではなく?
また、この非再帰的な 1 レベル ダウン クエリが何を行うかを確認する必要があります。
select bb.ppn_i, ba.cpn_i, bb.bomname_i, ba.quantity_i, (BOMLevel + 1) as BOMLevel
from BM010115 ba join
BM010115 bb
on ba.cpn_i = bb.ppn_i
where bb.BOMNAME_I like '' and
(ba.PPN_I like '0123105-HWT' and ba.BOMNAME_I like '')