sql >> Databáze >  >> RDS >> Sqlserver

Rekurzivní dotaz na kusovník

Myslím, že vaše logika byla v podstatě v pořádku. Zde jsou dvě vylepšení. Za prvé, úroveň je přírůstková, takže můžete vidět, co se stane s rekurzí. Za druhé, používá explicitní spojení:

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;

Mám podezření, že váš problém je podmínka where bb.BOMNAME_I like '' . Je možné, že tato hodnota je skutečně NULL spíše než prázdné?

Měli byste také zkontrolovat, co dělá tento nerekurzivní, jednoúrovňový dotaz:

      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. Jak zaregistrovat Pluggable Database (PDB) s nově vytvořeným LISTENER

  2. Funkce MySQL MOD() – Proveďte modulo operaci v MySQL

  3. Přišel někdo na to, jak škálovat repliky čtení Amazon RDS?

  4. MySql.Data.MySqlClient.MySqlException:“Hostitel localhost nepodporuje připojení SSL.”