Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn đệ quy nơi neo và thành viên có liên kết

Bạn không thể tham khảo mainMenu nhiều hơn một lần. Và điều này là do bạn thực sự có hai biểu thức neo, một cho vai trò và một cho người dùng. Có hai cách để sửa lỗi này. Bạn có thể chia truy vấn của mình thành hai CTE (một cho vai trò, một cho người dùng). Như thế này:

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

Hoặc bạn có thể kết hợp vai trò và biểu thức neo người dùng trước. Tôi không biết liệu truy vấn để lấy các mục con có chung cho cả các mục trình đơn vai trò và người dùng hay không, nếu không, bạn có thể sử dụng biểu thức liên kết có liên kết cho các mục vai trò và người dùng gốc.

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. CS2001 Thiếu AssemblyAttributes.cs khi thực thi gói SSIS được triển khai tới máy chủ

  2. Chọn 30 ngày qua với truy vấn sql

  3. Xem liệu một Bảng có Ràng buộc DEFAULT trong SQL Server hay không bằng cách sử dụng OBJECTPROPERTY ()

  4. Dự án cơ sở dữ liệu để thả cơ sở dữ liệu trước khi triển khai?

  5. Làm cách nào để thực hiện tìm kiếm phân biệt chữ hoa chữ thường trong mệnh đề WHERE (Tôi đang sử dụng SQL Server)?