sql >> Database >  >> RDS >> Sqlserver

Recursieve zoekopdracht voor stuklijst

Ik denk dat je logica in principe goed was. Hier zijn twee verbeteringen. Ten eerste is het niveau incrementeel, zodat u kunt zien wat er met de recursie gebeurt. Ten tweede gebruikt het een expliciete 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;

Ik vermoed dat uw probleem de toestand where bb.BOMNAME_I like '' . is . Is het mogelijk dat deze waarde echt NULL is? in plaats van leeg?

U moet ook controleren wat deze niet-recursieve, één niveau omlaag-query doet:

      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. tsvector ondersteunt alleen Engels?

  2. Voorloop- en volgtekens verwijderen in MySQL

  3. hoe COALESCE in orakel te gebruiken om gegevens uit twee rijen te combineren

  4. PostgreSQL-gegevens repliceren naar externe sites