एसक्यूएल के लिए आपकी सोच गलत है। लूप और शर्तों और चर के संदर्भ में मत सोचो; इसके बजाय, अपने इच्छित डेटा का वर्णन करने के तरीके के बारे में सोचें। मुश्किल हिस्सा यह है कि आप चाहते हैं कि क्वेरी अपने स्वयं के परिणामों को संदर्भित करे और यही पुनरावर्ती सीटीई के लिए हैं:
आप कुछ इस तरह खोज रहे हैं:
with recursive path as (
select id, parent from T where id = 4
union all
select t.id, t.parent from T t join path p on t.id = p.parent
)
select id, parent
from path
इससे आपको यह मिलेगा:
id | parent
----+--------
4 | 2
2 | 1
1 |
और फिर आप उस पथ को वापस एक साथ रख सकते हैं जो डेटाबेस के बाहर अधिक लिंक्ड-लिस्टी (या आपकी क्लाइंट भाषा में जो भी उपयुक्त हो) होगा। आपको parent
को शामिल करने की आवश्यकता नहीं है बेशक लेकिन इसे शामिल करने से आपको "पॉइंटर्स" को ठीक करने में मदद मिलेगी।