sql >> Database >  >> RDS >> Sqlserver

Recursieve zoekopdracht waarbij anker en lid vakbonden hebben

U kunt niet verwijzen naar mainMenu meerdere keren. En dit wordt veroorzaakt door het feit dat je eigenlijk twee ankerexpressies hebt, één voor rollen en één voor gebruikers. Er zijn twee manieren om dit op te lossen. U kunt uw zoekopdracht opsplitsen in twee CTE's (een voor rollen, een voor gebruikers). Zoals dit:

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

Of u kunt de rol- en gebruikersankerexpressies vooraf combineren. Ik weet niet of de query voor het ophalen van onderliggende items generiek is voor zowel rol- als gebruikersmenu-items, anders zou u een ankerexpressie kunnen gebruiken die een unie heeft voor rol- en gebruikersrootitems.

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. Hoe selecteer ik inhoud uit twee verschillende tabellen in Mysql?

  2. Hoe converteer je een interval zoals 1 dag 01:30:00 in 25:30:00?

  3. Tellen en groeperen van dezelfde benoemde kolom in verschillende tabellen (waarbij clausule uit slechts één tabel)

  4. Dump sql-bestand naar ClearDB in Heroku