समस्या आप प्रत्यावर्तन और प्रदर्शन के साथ सामना करेंगे कितनी बार यह परिणाम देने के recurse करना होगा है। प्रत्येक रिकर्सिव कॉल एक और अलग कॉल है जिसे कुल परिणामों में शामिल किया जाना होगा।
एसक्यूएल में 2K5 आप इस प्रत्यावर्तन को संभालने के लिए एक आम तालिका अभिव्यक्ति का उपयोग कर सकते हैं:
WITH Managers AS
(
--initialization
SELECT EmployeeID, LastName, ReportsTo
FROM Employees
WHERE ReportsTo IS NULL
UNION ALL
--recursive execution
SELECT e.employeeID,e.LastName, e.ReportsTo
FROM Employees e INNER JOIN Managers m
ON e.ReportsTo = m.employeeID
)
SELECT * FROM Managers
या किसी अन्य समाधान एक एक और तालिका में पदानुक्रम समतल
Employee_Managers
प्रबंधक-करने के लिए है (पी , कर्मचारी तालिका में एफके)
कर्मचारी आईडी (पीके, कर्मचारी तालिका में एफके)
सभी माता-पिता बच्चे के संबंध जहाजों इस तालिका में संग्रहीत किया जाएगा, इसलिए यदि प्रबंधक 1 प्रबंधक 2 कर्मचारी 3 का प्रबंधन करता है प्रबंधन करता है, तालिका दिखाई देगा:
:
ManagerId EmployeeId
1 2
1 3
2 1
यह पदानुक्रम आसानी से पूछे जाने की अनुमति देता
select * from employee_managers em
inner join employee e on e.employeeid = em.employeeid and em.managerid = 42
जो सभी कर्मचारियों प्रबंधक 42 है वापसी होगी उल्टा अधिक से अधिक प्रदर्शन होगा, लेकिन नकारात्मक पक्ष यह पदानुक्रम
मुझे लगता है कि उसकी समस्या वह चाहता है "पर है एक विशेष स्तर "। जब तक आप स्तर संख्या संग्रहीत नहीं करते हैं, आप कैसे जानते हैं कि किसी विशेष स्तर पर रूट = स्तर 1 के बिना, रूट = स्तर 2 के बच्चे, बच्चों के बच्चे = स्तर 3, आदि ... नहीं कि रिकर्सन की आवश्यकता है .. लेकिन कई माता-पिता हो सकते हैं। – Cervo