sql >> Database teknologi >  >> RDS >> Sqlserver

Rekursiv forespørgsel, hvor anker og medlem har fagforeninger

Du kan ikke henvise til mainMenu mere end en gang. Og det skyldes, at man faktisk har to ankerudtryk, et for roller og et for brugere. Der er to måder at løse dette på. Du kan opdele din forespørgsel i to CTE'er (en for roller, en for brugere). Sådan:

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

Eller du kan kombinere rolle- og brugerankerudtrykkene på forhånd. Jeg ved ikke, om forespørgslen for at få underordnede elementer er generisk for både rolle- og brugermenupunkter, ellers kan du bruge et ankerudtryk, der har en forening for rolle- og brugerrodelementer.

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. Gyldige modifikatorer for SQLite dato/tidsfunktioner

  2. Få PHP MYSQL-rangeringsforespørgsel til at rangere baseret på den samlede sum af score

  3. Hibernate - ManyToOne &Inheritance / JOINED / mapdBy

  4. Lagring af UUID som streng i mysql ved hjælp af JPA