سلام دوستان
💼🌳 چالش همیشگی ما با درختهای سلسلهمراتبی در SQL!
همیشه وقتی با ساختار درختی کار میکنیم، معمولاً از ریشه شروع میکنیم و تا برگها میرویم.
اما یه سؤال جالب پیش میاد:
❓ فرض کنید شما یه نقطه وسط درخت دارید و میخواید بفهمید این رکورد به کدوم ریشه یا مدیر اصلی وصل میشه؟
برای مثال: مشخصات یک کارمند را دارید و میخواید ببینید در چارت سازمانی، مسیرش تا مدیر ارشد کجاست.
اینجاست که باید برعکس فکر کنید: از پایین به بالا حرکت کنید، نه از بالا به پایین.
و نکته جالب: در کدنویسی و SQL، مدل بازگشتی فرقی نمیکنه، فقط جهت پیمایش عوض میشه 😎
🔹 ساختار جدول عمومی (میتونید تست کنید)
CREATE TABLE Table1
(
Id UNIQUEIDENTIFIER PRIMARY KEY,
Name NVARCHAR(100),
ParentId UNIQUEIDENTIFIER NULL
);
Id → شناسه رکورد
ParentId → شناسه والد (NULL یعنی ریشه)
Name → نام رکورد
🔹 کوئری CTE برای پیدا کردن مسیر تا ریشه
DECLARE @InputId UNIQUEIDENTIFIER = 'YOUR_RECORD_ID_HERE';
WITH ReverseCTE AS
(
-- شروع از رکورد مورد نظر
SELECT Id, ParentId, Name, 0 AS Level
FROM Table1
WHERE Id = @InputId
UNION ALL
-- پیمایش به سمت والد
SELECT p.Id, p.ParentId, p.Name, c.Level + 1
FROM Table1 p
INNER JOIN ReverseCTE c ON c.ParentId = p.Id
WHERE c.ParentId IS NOT NULL
)
SELECT *
FROM ReverseCTE
ORDER BY Level DESC; -- ریشه بالای خروجی
اگر فقط ریشه براتون مهمه:
SELECT TOP 1 Id, Name
FROM ReverseCTE
ORDER BY Level DESC;
🔹 نکات حرفهای 💡
برای هر عمق درختی جواب میده
مناسب گزارشها، داشبوردها و تحلیل سلسلهمراتبی
میتونید مسیر رو به صورت رشته /Root/Parent/Child/... هم بسازید تا راحت نمایش بدید
🧠 تجربه شخصی:
وقتی شما از پایین شروع میکنید و مسیر تا ریشه رو پیدا میکنید، دید کاملتری نسبت به سلسلهمراتب پیدا میکنید.
مثل اینه که بفهمید یک کارمند دقیقاً تحت چه مدیریتی و چه شاخهای از سازمان قرار گرفته.
20 · 1.8K · Postسلام دوستان
28 December 2025Nearby in the feed
Hthis message
H