WITH
句を使用して、MS SQL Server で最初に作成されたクエリを MySQL で書き直す必要があります。これは基本的に、子レコードのすべてのレベルの親レコードを取得することです。ここでは、例として Oracle データベースのスキーマのクラシックEMPLOYEES
テーブルを使用しています。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 列に表示しています。
ただし、WITH 句がサポートされていないため、このアプローチは MySQL では機能しません。MySQlでこのクエリを書き直す方法について誰か助けてもらえますか?