sql >> Database teknologi >  >> RDS >> Sqlserver

Rekursiv forespørgsel til stykliste

Jeg synes din logik var i bund og grund ok. Her er to forbedringer. For det første er niveauet trinvist, så du kan se, hvad der sker med rekursionen. For det andet bruger den en eksplicit join:

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;

Jeg formoder, at dit problem er tilstanden where bb.BOMNAME_I like '' . Er det muligt, at denne værdi virkelig er NULL i stedet for blank?

Du bør også tjekke, hvad denne ikke-rekursive forespørgsel på ét niveau gør:

      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. Sådan gemmer du medarbejdernes tidsplaner i en database

  2. MySql UTF-kodning

  3. Betjening er ikke tilladt, når objektet er lukket under udførelse af lagret procedure

  4. Forskel i tid mellem poster