برنامه نویسی

CTE بازگشتی بخش 2 – انجمن DEV

بیایید یک مثال کامل با استفاده از یک CTE بازگشتی با داده های نمونه، از جمله ایجاد جدول، درج داده، و خود پرس و جو بازگشتی ایجاد کنیم.

مرحله 1: جدول نمونه را ایجاد کنید

ابتدا یک جدول ساده برای کارکنان ایجاد می کنیم تا اطلاعات کارمندان خود را نگهداری کنیم.

کارمندان CREATE TABLE (
EmployeeID INT PRIMARY KEY،
نام VARCHAR(100)،
ManagerID INT،
FOREIGN KEY (ManagerID) REFERENCES کارمندان (EmployeeID)
)

مرحله 2: داده های نمونه را وارد کنید

اکنون، نمونه ای از داده ها را در جدول کارکنان قرار می دهیم.

ارزش ها را در کارکنان (EmployeeID، نام، ManagerID) درج کنید
(1، 'آلیس'، NULL)، — آلیس مدیر سطح بالا است
(2، 'باب'، 1)، — باب به آلیس گزارش می دهد
(3، 'کارول'، 1)، — کارول به آلیس گزارش می دهد
(4، 'دیو'، 2)، — دیو به باب گزارش می دهد
(5، 'حوا'، 2)، — حوا به باب گزارش می دهد
(6، 'فرانک'، 3)، — فرانک به کارول گزارش می دهد
(7، 'فیض'، 3); – گریس به کارول گزارش می دهد

مرحله 3: CTE بازگشتی برای بازیابی سلسله مراتب کارکنان

اکنون CTE بازگشتی را برای بازیابی سلسله مراتب کارمندان، از Alice (مدیر سطح بالا) می نویسیم.

با بازگشتی EmployeeHierarchy AS (
– عضو لنگر: مدیر سطح بالا را انتخاب کنید (آلیس)
SELECT EmployeeID, Name, ManagerID, 0 AS Level
از کارمندان
WHERE ManagerID IS NULL است

UNION ALL

-- Recursive member: Select employees reporting to the current level's employees
SELECT e.EmployeeID, e.Name, e.ManagerID, eh.Level + 1
FROM employees e
INNER JOIN EmployeeHierarchy eh ON e.ManagerID = eh.EmployeeID
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

)
– انتخاب نهایی: کل سلسله مراتب را دریافت کنید
شناسه کارمند، نام، شناسه مدیر، سطح را انتخاب کنید
FROM EmployeeHierarchy
سفارش بر اساس سطح، EmployeeID.

توضیح CTE:

  1. عضو لنگر:

کارمندی را انتخاب می کند که مدیر ندارد (ManagerID IS NULL) که در این مورد آلیس است.

همچنین شامل یک ستون Level برای نشان دادن سطح سلسله مراتب است (0 برای آلیس).

  1. عضو بازگشتی:

کارمندانی را انتخاب می کند که ManagerID آنها با EmployeeID از مجموعه نتایج قبلی مطابقت دارد.

سطح را 1 افزایش می دهد تا نشان دهد کارمند چقدر در سلسله مراتب عمیق است.

  1. انتخاب نهایی:

نتایج را از EmployeeHierarchy CTE، مرتب‌سازی بر اساس سطح و شناسه کارمند بازیابی می‌کند.

خروجی

هنگامی که CTE فوق را اجرا می کنید، خروجی به شکل زیر خواهد بود:

خلاصه

سطح 0: آلیس (مدیر سطح بالا)

سطح 1: باب و کارول (گزارش مستقیم به آلیس)

سطح 2: دیو و ایو (به باب گزارش می دهد) و فرانک و گریس (به کارول گزارش می دهد)

این مثال نحوه استفاده از CTE بازگشتی را برای عبور از یک ساختار سلسله مراتبی در SQL نشان می دهد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا