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

SQL पुनरावर्ती क्वेरी कैसे डिज़ाइन करें?

देखें:

अपडेट करें:

एक उचित पुनरावर्ती सीटीई में मूल रूप से तीन चीजें होती हैं:

  • एक एंकर SELECT शुरुआत के लिए; जो चुन सकता है उदा। मूल स्तर के कर्मचारी (जहां Reports_To NULL है), या यह आपके द्वारा परिभाषित किसी भी मनमाने कर्मचारी का चयन कर सकता है, उदा। एक पैरामीटर द्वारा

  • एक UNION ALL

  • एक पुनरावर्ती SELECT कथन जो उसी से चयन करता है, आमतौर पर स्व-संदर्भ तालिका और वर्तमान में बनाए जा रहे पुनरावर्ती CTE के साथ जुड़ता है

यह आपको एक परिणाम सेट को पुनरावर्ती रूप से बनाने की क्षमता देता है जिसे आप फिर से चुन सकते हैं।

यदि आप Northwindको देखते हैं नमूना डेटाबेस, इसमें Employees नामक एक तालिका है जो स्व-संदर्भित है:Employees.ReportsTo --> Employees.EmployeeID परिभाषित करता है कि कौन किसे रिपोर्ट करता है।

आपका सीटीई कुछ इस तरह दिखेगा:

;WITH RecursiveCTE AS
(
    -- anchor query; get the CEO
    SELECT EmployeeID, FirstName, LastName, Title, 1 AS 'Level', ReportsTo
    FROM dbo.Employees
    WHERE ReportsTo IS NULL

    UNION ALL

    -- recursive part; select next Employees that have ReportsTo -> cte.EmployeeID      
    SELECT 
       e.EmployeeID, e.FirstName, e.LastName, e.Title, 
       cte.Level + 1 AS 'Level', e.ReportsTo
    FROM 
       dbo.Employees e
    INNER JOIN 
       RecursiveCTE cte ON e.ReportsTo = cte.EmployeeID
)
SELECT *
FROM RecursiveCTE
ORDER BY Level, LastName    

मैं नहीं जानता कि क्या आप अपने नमूने को एक उचित पुनरावर्ती सीटीई में अनुवाद कर सकते हैं - लेकिन यह मूल रूप से इसका सार है:एंकर क्वेरी, यूनियन ऑल, रिकर्सिव क्वेरी




  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 सर्वर 2008 - बहु-मान कॉलम को अद्वितीय मानों वाली पंक्तियों में विभाजित करें

  2. क्लस्टर्ड और नॉन-क्लस्टर इंडेक्स के बीच अंतर क्या हैं?

  3. Microsoft SQL सर्वर त्रुटि 18456 का समस्या निवारण

  4. SQL सर्वर एजेंट जॉब (T-SQL) के लिए जॉब स्टेप अपडेट करें

  5. अशक्त वस्तु का मान #2 . होना चाहिए