我需要在 MySQL 中重写一个查询,该查询最初是使用该WITH
子句在 MS SQL Server 中编写的。这基本上是为了获取子记录的所有级别的父记录。这里,我以Oracle数据库EMPLOYEES
中的schema的经典表HR
为例。
表中的原始数据EMPLOYEES
就是这种格式。
select employee_id, manager_id
from employees
order by 1,2;
---------------------------------------------
EMPLOYEE_ID MANAGER_ID
---------------------- ----------------------
100
101 100
102 100
103 102
104 103
107 103
124 100
141 124
142 124
143 124
144 124
149 100
174 149
176 149
178 149
200 101
201 100
202 201
205 101
206 205
我的要求是查看子记录的所有级别的父记录。我可以使用 Oracle 和 MS SQL Server 中的以下查询来实现这一点。
WITH Asd(Child,
Parent
)
AS (SELECT Employee_Id,
Manager_Id
FROM Employees
UNION ALL
SELECT E.Employee_Id,
A.Parent
FROM Employees E, Asd A
WHERE E.Manager_Id = A.Child
)
SELECT Child,
Parent
FROM Asd
WHERE Parent IS NOT NULL
ORDER BY Child, Parent;
----------------------------------------------------------
CHILD PARENT
---------------------- -----------------------------------
101 100
102 100
103 100
103 102
104 100
104 102
104 103
107 100
107 102
107 103
124 100
141 100
141 124
142 100
142 124
143 100
143 124
144 100
144 124
149 100
174 100
174 149
176 100
176 149
178 100
178 149
200 100
200 101
201 100
202 100
202 201
205 100
205 101
206 100
206 101
206 205
36 rows selected
如您所见,我将所有父母以及祖父母都放在查询中的 PARENT 列下。
但是,这种方法在 MySQL 中不起作用,因为不支持 WITH 子句。谁能帮助我如何在 MySQl 中重写这个查询?