sql >> データベース >  >> RDS >> Sqlserver

部品表の再帰クエリ

    あなたの論理は基本的に大丈夫だったと思います。ここでは、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 '')
    


    1. 1064、SQL構文にエラーがあります; ... Python MySQL

    2. docker-composeを使用してdjangoコンテナとmysqlコンテナをリンクする

    3. T-SQL:最も近い15分間隔に丸めます

    4. PythonCGIMySQLスクリプトの出力を返す