Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Query Rekursif untuk Bill Of Material

Saya pikir logika Anda pada dasarnya baik-baik saja. Berikut adalah dua peningkatan. Pertama, levelnya inkremental sehingga Anda dapat melihat apa yang terjadi dengan rekursi. Kedua, ia menggunakan gabungan eksplisit:

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;

Saya menduga masalah Anda adalah kondisi where bb.BOMNAME_I like '' . Mungkinkah nilai ini benar-benar NULL bukannya kosong?

Anda juga harus memeriksa apa yang dilakukan kueri turun satu tingkat non-rekursif ini:

      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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah kinerja dalam daftar Pencarian Dropdown Dinamis di excel

  2. Bagaimana cara memaksa nama skema dbo?

  3. Kekurangan MARS (Multiple Active Result Sets)?

  4. Cara Membuat Database di SQL Server Dengan Menggunakan TSQL atau GUI - Tutorial SQL Server / TSQL Part 24

  5. System.Data.SqlClient.SqlException:Sintaks salah di dekat '='