Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التنقل في التسلسل الهرمي

جزء من قسم ما وراء الأساسيات في رحلة SQL على Coddy — الدرس 21 من 27.

السبب الحقيقي لوجود الـ CTEs المتكررة (recursive CTEs) هو: تتبع علاقة الأب/الابن المخزنة في جدول واحد. لنفترض أن جدول employees يحتوي على عمود manager_id يشير إلى نفس الجدول:

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7              -- anchor: الموظف الذي سنبدأ منه
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id      -- recursive: الانتقال إلى المدير
)
SELECT * FROM chain

تقوم كل خطوة بربط الـ CTE مجدداً بجدول employees، منتقلةً مستوى واحداً للأعلى في الشجرة. يتوقف التكرار (recursion) بشكل طبيعي عندما لا يكون للصف مدير (لا يطابق الـ JOIN أي شيء).

challenge icon

التحدي

متوسط

الجداول والأعمدة المتاحة:

  • <strong>categories</strong>: <strong>id</strong>, <strong>name</strong>, <strong>parent_id</strong>

كل فئة لديها parent_id اختياري يشير إلى فئة أخرى. قم بإرجاع جميع الفئات التي تعتبر من أحفاد الفئة ذات الـ id = 1 (أبناؤها، أحفادها، ...) ولكن ليس الفئة 1 نفسها. قم بإرجاع id و name، مرتبة حسب id.

ورقة مرجعية

استخدم تعبيرات الجدول الشائعة العودية (recursive CTEs) للتنقل عبر علاقات الأب/الابن (parent/child) المخزنة في جدول واحد (على سبيل المثال، عمود manager_id أو parent_id يشير إلى نفس الجدول):

WITH RECURSIVE chain AS (
    SELECT id, name, manager_id
    FROM employees WHERE id = 7          -- anchor: صف البداية
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN chain c ON e.id = c.manager_id  -- recursive: الانتقال إلى الأب
)
SELECT * FROM chain

يتوقف التكرار العودي بشكل طبيعي عندما لا يجد JOIN أي صفوف متطابقة (على سبيل المثال، صف ليس له مدير).

جرّب بنفسك

WITH RECURSIVE descendants AS (
    -- anchor: الأبناء المباشرون لـ id 1
    -- recursive: أبناؤهم، إلخ.
)
SELECT id, name FROM descendants ORDER BY id
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس ما وراء الأساسيات