מעבר לאורך היררכיה
חלק מהיחידה מעבר ליסודות במסלול ה-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 אונליין