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

रिकर्सिव सेल्फ-जॉइन करने का सबसे आसान तरीका?

WITH    q AS 
        (
        SELECT  *
        FROM    mytable
        WHERE   ParentID IS NULL -- this condition defines the ultimate ancestors in your chain, change it as appropriate
        UNION ALL
        SELECT  m.*
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q

ऑर्डर देने की शर्त जोड़कर, आप ट्री ऑर्डर को सुरक्षित रख सकते हैं:

WITH    q AS 
        (
        SELECT  m.*, CAST(ROW_NUMBER() OVER (ORDER BY m.PersonId) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN AS bc
        FROM    mytable m
        WHERE   ParentID IS NULL
        UNION ALL
        SELECT  m.*,  q.bc + '.' + CAST(ROW_NUMBER() OVER (PARTITION BY m.ParentID ORDER BY m.PersonID) AS VARCHAR(MAX)) COLLATE Latin1_General_BIN
        FROM    mytable m
        JOIN    q
        ON      m.parentID = q.PersonID
        )
SELECT  *
FROM    q
ORDER BY
        bc

ORDER BY . को बदलकर शर्त यह है कि आप भाई-बहनों का क्रम बदल सकते हैं।



  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 सर्वर 2019 में त्वरित डेटाबेस रिकवरी

  2. SQL सर्वर में एक स्ट्रिंग से बचें ताकि LIKE अभिव्यक्ति में उपयोग करना सुरक्षित हो

  3. SQL सर्वर डेटाबेस में UTF-8 Collation का उपयोग कैसे करें?

  4. dtexec का उपयोग करके SSIS पैकेज चलाना

  5. एक चर को एक ट्रिगर में पास करें