SQL सर्वर सामान्य तालिका अभिव्यक्तियों का उपयोग करता है (विवरण के साथ) इसे प्राप्त करने के लिए (सामान्य तालिका अभिव्यक्तियों का उपयोग करके रिकर्सिव क्वेरी देखें)।
इस प्रकार की क्वेरी का उपयोग Oracle में भी किया जा सकता है (यदि मैं गलत नहीं हूं तो 11g से शुरू)।
परिणामी क्वेरी अधिक जटिल है:
WITH emp(employee_id, manager_id, job_id, last_name, lvl)
AS (
SELECT e.employee_id, e.manager_id, e.job_id, e.last_name, 1 lvl
FROM employees e
WHERE job_id = 'AD_VP'
UNION ALL
SELECT e.employee_id, e.manager_id, e.job_id, e.last_name, r.lvl + 1 lvl
FROM employees e
JOIN emp r ON r.employee_id = e.manager_id
)
SELECT LPAD(' ', 2 * (lvl-1)) || last_name org_chart,
employee_id, manager_id, job_id
FROM emp;