التنقل في التسلسل الهرمي
جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy. الدرس 21 من 27.
السبب الحقيقي لوجود CTEs递递ية: التنقل عبر علاقة parent/child مخزّنة في جدول واحد. افترض أن employees يحتوي على عمود manager_id يشير مرة أخرى إلى الجدول نفسه:
WITH RECURSIVE chain AS (
SELECT id, name, manager_id
FROM employees WHERE id = 7 -- المرساة: الموظف البادئ
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN chain c ON e.id = c.manager_id -- التكراري: القفز إلى المدير
)
SELECT * FROM chainفي كل خطوة، يربط الاستعلام الفرعي المؤقت CTE نفسه مجددًا بـ employees، صاعدًا مستوى واحدًا في الشجرة. يتوقف الاستدعاء التكراري طبيعيًا عندما لا يكون للصف مدير (لا يطابق JOIN أي شيء).
التحدي
متوسطالجداول والأعمدة المتاحة:
categories:id،name،parent_id
لكل فئة parent_id اختياري يشير إلى فئة أخرى. أعد جميع الفئات التي تُعد descendants للفئة id = 1 (أي children وgrandchildren و…)، ولكن ليس الفئة 1 نفسها. أعد id وname، مرتبة حسب id.
جرّب بنفسك
WITH RECURSIVE descendants AS (
-- المرساة: الأبناء المباشرون لـ id 1
-- التكراري: أبناؤهم، إلخ.
)
SELECT id, name FROM descendants ORDER BY id
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس ما وراء الأساسيات
تدرّب بنفسك: Playground لـ SQL