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

SQL सर्वर में ट्री संरचना डेटा क्वेरी

मुझे नहीं लगता कि डिजाइन में कुछ भी गलत है, यह मानते हुए कि आपके पास सीमित स्तर के माता-पिता-बाल संबंध हैं। पुनरावर्ती CTE का उपयोग करके संबंध पुनर्प्राप्त करने का एक त्वरित उदाहरण यहां दिया गया है:

USE tempdb;
GO

CREATE TABLE dbo.tree
(
    ID INT PRIMARY KEY,
    name VARCHAR(32),
    ParentID INT FOREIGN KEY REFERENCES dbo.tree(ID)
);

INSERT dbo.tree SELECT 1, 'grandpa', NULL
UNION ALL SELECT 2, 'dad', 1
UNION ALL SELECT 3, 'me', 2
UNION ALL SELECT 4, 'mom', 1
UNION ALL SELECT 5, 'grandma', NULL;

;WITH x AS
(
    -- anchor:
    SELECT ID, name, ParentID, [level] = 0
    FROM dbo.tree WHERE ParentID IS NULL
    UNION ALL
    -- recursive:
    SELECT t.ID, t.name, t.ParentID, [level] = x.[level] + 1
    FROM x INNER JOIN dbo.tree AS t
    ON t.ParentID = x.ID
)
SELECT ID, name, ParentID, [level] FROM x
ORDER BY [level]
OPTION (MAXRECURSION 32);
GO

साफ़ करना न भूलें:

DROP TABLE dbo.tree;

यह एक उपयोगी लेख हो सकता है। एक विकल्प है hierarchyid कोड> लेकिन अधिकांश परिदृश्यों के लिए मुझे यह अत्यधिक जटिल लगता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORDER BY खंड में SQL इंजेक्शन को रोकें

  2. एसक्यूएल में संख्या को शब्दों में कनवर्ट करना

  3. मैं प्रोग्रामेटिक रूप से एक डीएसएन कैसे बना सकता हूं?

  4. SQL सर्वर 2017 में नई सुविधाएँ (डेटाबेस इंजन)

  5. माता-पिता आईडी के लिए सभी नेस्टेड बच्चे प्राप्त करें