2

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でこのクエリを書き直す方法について誰か助けてもらえますか?

4

1 に答える 1