Nemůžete odkazovat na mainMenu
více než jednou. A to je způsobeno tím, že ve skutečnosti máte dva kotvící výrazy, jeden pro role a jeden pro uživatele. Existují dva způsoby, jak to opravit. Dotaz můžete rozdělit do dvou CTE (jeden pro role, jeden pro uživatele). Takhle:
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
Nebo můžete předem zkombinovat výrazy role a uživatelského ukotvení. Nevím, jestli je dotaz na získání podřízených položek obecný pro položky nabídky role i uživatele, jinak byste mohli použít výraz kotvy, který má sjednocení pro položky role a kořenové položky uživatele.
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