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

माता-पिता और अनंत बच्चों को वापस करने के लिए कथन का चयन करें

तो इस उत्तर का संदर्भ देना:

एसक्यूएल सर्वर सीटीई पेरेंट चाइल्ड रिकर्सिव

यहां आपके स्कीमा के साथ एक कार्यशील संस्करण दिया गया है:

टेबल निर्माण स्क्रिप्ट

CREATE TABLE YOUR_TABLE
    ([ID] int, [ParentID] int, [Name] varchar(21))
;
    
INSERT INTO YOUR_TABLE
    ([ID], [ParentID], [Name])
VALUES
    (1, NULL, 'A root'),
    (2, NULL, 'Another root'),
    (3, 1, 'Child of 1'),
    (4, 3, 'Grandchild of 1'),
    (5, 4, 'Great grandchild of 1'),
    (6, 1, 'Child of 1'),
    (7, NULL, 'Another root'),
    (8, 7, 'Child of 6')
;

पुनरावर्ती सीटीई

DECLARE @ID INT = 1

;WITH ParentChildCTE
AS (
    SELECT ID, ParentId, Name        
    FROM YOUR_TABLE
    WHERE Id = @ID

    UNION ALL

    SELECT T1.ID, T1.ParentId, T1.Name        
    FROM YOUR_TABLE T1
    INNER JOIN ParentChildCTE T ON T.ID = T1.ParentID
    WHERE T1.ParentID IS NOT NULL
    )
SELECT *
FROM ParentChildCTE

मुख्य भाग CTE . में है निर्माण जहां UNION ALL ID . से जुड़ते हुए, परिणाम सेट पर वापस जुड़ जाता है करने के लिए ParentId , जो स्तर की संख्या को सीमित नहीं करता है।



  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 सर्वर 2005/2008 में सप्ताह का दिन प्राप्त करें

  2. SQL सर्वर NVarchar फ़ील्ड में जापानी वर्णों के बजाय प्रश्न चिह्न वर्ण क्यों संग्रहीत कर रहा है?

  3. SQL ओवर () क्लॉज - यह कब और क्यों उपयोगी है?

  4. SQL सर्वर पूर्ण-पाठ खोज का उपयोग करके उत्पाद विश्लेषण करें। भाग 1

  5. SQL सर्वर (T-SQL) में एक विभाजित तालिका बनाएँ