sql >> Databasteknik >  >> RDS >> Sqlserver

Rekursiv fråga för stycklistor

Jag tycker att din logik i princip var ok. Här är två förbättringar. För det första är nivån inkrementell så att du kan se vad som händer med rekursionen. För det andra använder den en explicit 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;

Jag misstänker att ditt problem är tillståndet where bb.BOMNAME_I like '' . Är det möjligt att detta värde verkligen är NULL snarare än tomt?

Du bör också kontrollera vad den här icke-rekursiva frågan på en nivå nedåt 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. Hur man lagrar JSON-sträng i MySQL db

  2. Provisioning MySQL/MariaDB Vault Database Secrets Engine med Terraform

  3. Fatalt fel:Oupptäckt undantag 'mysqli_sql_exception' med meddelandet 'Inget index används i fråga/förberedd sats'

  4. Metakommandon i Psycopg2 - \d fungerar inte