استعلام SQL لالرئيسي الطفل العلاقة
-
03-07-2019 - |
سؤال
ولدي ديسيبل الجدول مع علاقة الطفل الأم على النحو التالي:
NodeId NodeName ParentId
------------------------------
1 Node1 0
2 Node2 0
3 Node3 1
4 Node4 1
5 Node5 3
6 Node6 5
7 Node7 2
وهنا parentId = 0 يعني أنه من عقدة مستوى الجذر. الآن أريد أن أكتب استعلام SQL الذي سيعود الطفل على جميع المستويات من فئة الوالدين.
ومنها مثلا. لNODEID = 1، يجب أن تعيد 3، 4، 5، 6.
وأستخدمه MS SQL خادم 2005
المحلول
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
)
select * from [CTE]
نصائح أخرى
ويجب أن ننظر إلى استخدام نموذج متداخلة مجموعة للعلاقات بين الوالدين والطفل ضمن قاعدة بيانات SQL. أنها أجمل بكثير من محاولة لتخزين parentID من السجلات في الجدول مثل هذا، ويجعل الاستفسارات مثل هذا أسهل بكثير.
وفقط للتأكد من أنها تعمل إذا به أحد الوالدين من نفسه (وإلا فإنه سوف عنة حتى وقوعه):
with [CTE] as (
select * from [TheTable] c where c.[ParentId] = 1
union all
select * from [CTE] p, [TheTable] c where c.[ParentId] = p.[NodeId]
and c.[ParentId] <> c.[NodeId]
)
select * from [CTE]
WITH Temp_Menu AS
(
SELECT AM.* from FCB_AccessMenu AM where AM.[ParentId] = 6
UNION ALL
SELECT AM.* FROM FCB_AccessMenu AM ,Temp_Menu TM WHERE AM.[ParentID]=TM.[MenuID]
)
SELECT * FROM Temp_Menu ORDER BY ParentID
لا تنتمي إلى StackOverflow