programing

mariadb의 "With As"를 변경하는 다른 방법

muds 2023. 11. 2. 22:09
반응형

mariadb의 "With As"를 변경하는 다른 방법

WITH KPILibHier (kpilib_code,parent_code,kpi_name, depth, iscategory)
AS ( SELECT K.kpilib_code, K.parent_code, K.kpi_name_en, K.kpi_depth, K.iscategory 
     FROM TPMDPERIODKPILIB K 
     INNER JOIN TPMDPERIODKPI PK ON PK.period_code = K.period_code 
     UNION ALL 
     SELECT A.kpilib_code, A.parent_code, A.kpi_name_en, A.kpi_depth, A.iscategory 
     FROM TPMDPERIODKPILIB A 
     INNER JOIN KPILibHier AS B ON A.kpilib_code = B.parent_code )
SELECT DISTINCT Z.kpi_name AS libname, Z.kpilib_code AS libcode,
Z.parent_code AS pcode, Z.depth, Z.iscategory, PK.target
FROM KPILibHier Z
LEFT JOIN TPMDPERIODKPILIB KPI 
  ON KPI.kpilib_code = Z.kpilib_code
LEFT JOIN TPMDPERIODKPI PK 
  ON PK.period_code = KPI.period_code 
ORDER BY Z.depth, Z.kpi_name 

이건 내 암호입니다.SQL 서버에서 실행할 수 있지만 이제는 마리아드비를 사용해야 하고 마리아드비는 "WITH AS"를 사용하지 않습니다. 그렇다면 동일한 결과에 대해 이 코드를 변경할 수 있는 다른 방법이 있습니까?

보시다시피 CTE 내부에도 'INNER JOIN KPILIBHier'가 있어서 평소처럼 평범한 서브쿼리를 만들지 못했습니다.

CTE의 내용을 파생된 테이블로 옮기는 것만으로도 사용 가능한 것을 제공할 수 있습니다.뭐 그런 거..

SELECT DISTINCT Z.kpi_name AS libname, Z.kpilib_code AS libcode,
Z.parent_code AS pcode, Z.depth, Z.iscategory, PK.target
FROM
( SELECT K.kpilib_code, K.parent_code, K.kpi_name_en AS kpi_name, K.kpi_depth AS depth, K.iscategory 
     FROM TPMDPERIODKPILIB K 
     INNER JOIN TPMDPERIODKPI PK ON PK.period_code = K.period_code 
     UNION ALL 
     SELECT A.kpilib_code, A.parent_code, A.kpi_name_en, A.kpi_depth, A.iscategory 
     FROM TPMDPERIODKPILIB A 
     ) z
INNER JOIN z AS B ON A.kpilib_code = B.parent_code 
LEFT JOIN TPMDPERIODKPILIB KPI 
  ON KPI.kpilib_code = Z.kpilib_code
LEFT JOIN TPMDPERIODKPI PK 
  ON PK.period_code = KPI.period_code 
ORDER BY Z.depth, Z.kpi_name 

언급URL : https://stackoverflow.com/questions/32642962/any-other-ways-to-change-with-as-for-mariadb

반응형