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

Kueri rekursif di mana jangkar dan anggota memiliki serikat pekerja

Anda tidak dapat merujuk ke mainMenu lebih dari sekali. Dan ini disebabkan oleh fakta bahwa Anda sebenarnya memiliki dua ekspresi jangkar, satu untuk peran dan satu untuk pengguna. Ada dua cara untuk memperbaikinya. Anda dapat membagi kueri Anda menjadi dua CTE (satu untuk peran, satu untuk pengguna). Seperti ini:

with
roleMainMenu (...)
as
(
    -- role
    select ...
    from ....
        and parentID is null
    union all
    select ...
    from ....
        inner join  mainMenu on parentID = mainMenu.id
),
userMainMenu (...)
as
(
    -- user
    select ...
    from ....
        and parentID is null
    union all
    select ...
    from ....
        inner join  mainMenu on parentID = mainMenu.id
)
select * from roleMainMenu
union
select * from userMainMenu

Atau Anda bisa menggabungkan peran dan ekspresi jangkar pengguna sebelumnya. Saya tidak tahu apakah kueri untuk mendapatkan item anak bersifat umum untuk item menu peran dan pengguna, jika tidak, Anda dapat menggunakan ekspresi jangkar yang memiliki gabungan untuk item root peran dan pengguna.

with mainMenu (...)
as
(
    select root.* from
    (
        -- role roots
        select .. from ... and parentID is null
        union
        -- user roots
        select .. from ... and parentID is null
    ) root
    union all
    select ... from root
    inner join mainMenu on parentID = mainMenu.id
)
select *
from mainMenu


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Paket SQL Server:perbedaan antara Pemindaian Indeks / Pencarian Indeks

  2. Kesalahan 'Harus Mendeklarasikan Variabel Skalar' Saat Melewati Parameter Bernilai Tabel ke Pernyataan SQL Berparameter

  3. Cara mendapatkan nomor berikutnya secara berurutan

  4. Metode yang waras/cepat untuk meneruskan daftar parameter variabel ke prosedur tersimpan SqlServer2008

  5. Memosisikan tabel dan bagan di BIDS SSRS