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