Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

रिकर्सिव क्वेरी जहां एंकर और सदस्य के पास यूनियन हैं

आप mainMenu का संदर्भ नहीं ले सकते एक से ज्यादा बार। और यह इस तथ्य के कारण होता है कि आपके पास वास्तव में दो एंकर भाव हैं, एक भूमिकाओं के लिए और एक उपयोगकर्ताओं के लिए। इसे ठीक करने के दो तरीके हैं। आप अपनी क्वेरी को दो सीटीई (भूमिकाओं के लिए एक, उपयोगकर्ताओं के लिए एक) में विभाजित कर सकते हैं। इस तरह:

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

या आप भूमिका और उपयोगकर्ता एंकर अभिव्यक्तियों को पहले से जोड़ सकते हैं। मुझे नहीं पता कि बाल आइटम प्राप्त करने की क्वेरी भूमिका और उपयोगकर्ता मेनू आइटम दोनों के लिए सामान्य है, अन्यथा आप एक एंकर अभिव्यक्ति का उपयोग कर सकते हैं जिसमें भूमिका और उपयोगकर्ता रूट आइटम के लिए एक संघ है।

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. SQL सर्वर के लिए सबसे तेज़ तरीका सम्मिलित करता है, अद्यतन करता है, चयन करता है

  2. एसक्यूएल सर्वर कनेक्शन स्ट्रिंग में कनेक्ट टाइमआउट क्या है?

  3. SQL खराब संग्रहीत कार्यविधि निष्पादन योजना प्रदर्शन - पैरामीटर सूँघना

  4. निर्यात संग्रहीत कार्यविधि परिणाम SSMS में Excel में सेट किया गया है

  5. SQL सर्वर त्रुटि का अंतर्निहित रूपांतरण क्योंकि एक संयोजन विरोध के कारण मान का संयोजन अनसुलझा है।