מעבר לאורך היררכיה
חלק מהיחידה מעבר ליסודות במסלול ה-SQL של Coddy. שיעור 21 מתוך 27.
הסיבה האמיתית לקיומן של טבלאות CTE רקורסיביות: מעבר לאורך קשר הורה/ילד המאוחסן בטבלה אחת. נניח שלטבלה 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 אופציונלי שמצביע על קטגוריה אחרת. יש להחזיר את כל הקטגוריות שהן צאצאיות של הקטגוריה id = 1 (הילדים שלה, הנכדים שלה, …), אבל לא את קטגוריה 1 עצמה. יש להחזיר את id ואת name, לפי הסדר של id.
נסו בעצמכם
WITH RECURSIVE descendants AS (
-- עוגן: הילדים הישירים של id 1
-- רקורסיבי: הילדים שלהם, וכן הלאה.
)
SELECT id, name FROM descendants ORDER BY id
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה מעבר ליסודות
תרגלו בעצמכם: SQL אונליין