hongs77
88
2019-10-10 16:56:26
2
103

Oracle -> MariaDB 변경 중인데 CONNECT BY 때문에 미치겠습니다 ㅜ


=========================== -> oracle

SELECT LEVEL-1 AS LEV

              ,'' AS "_CHK" 

              ,A.HRNK_DEPT_CD

              ,A.DEPT_CD

      ,B.DEPT_NM

              ,A.SORT_SEQN

              ,CASE WHEN A.HR_USE_YN       = 'Y' THEN '1' ELSE '0' END AS HR_USE_YN

              ,A.VLD_START_DT

              ,A.REMARK_TEXT

              ,(SELECT AA.CC_CD 

                FROM   HR_DEPT_CC AA

                WHERE  AA.DEPT_CD = A.DEPT_CD

                AND    A.VLD_START_DT BETWEEN AA.VLD_START_DT AND NVL(AA.VLD_END_DT, '99991231')

                AND    AA.VLD_START_DT = (SELECT MAX(VLD_START_DT)

                                          FROM   HR_DEPT_CC

                                          WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                                          AND    DEPT_CD = A.DEPT_CD)) AS CC_NM

              ,(SELECT HR_GET_EMPNM_FN(EMPNO)

                FROM   HR_DEPT_TMGR

                WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                AND    DEPT_CD = A.DEPT_CD

                AND    VLD_START_DT = (SELECT MAX(VLD_START_DT)

                                       FROM   HR_DEPT_TMGR

                                       WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                                       AND    DEPT_CD = A.DEPT_CD)) AS DEPT_EMP_NM 

FROM   HR_ORGC_D A

      ,HR_DEPT_C B

              ,(SELECT MAX (VLD_START_DT) AS VLD_START_DT

                FROM   HR_ORGC

                WHERE  1 = 1

                AND VLD_START_DT = #{VLD_START_DT}

                ) C

WHERE  A.DEPT_CD = B.DEPT_CD(+)

        AND    A.VLD_START_DT = C.VLD_START_DT

        

        START WITH A.HRNK_DEPT_CD IS NULL

CONNECT BY PRIOR A.DEPT_CD = A.HRNK_DEPT_CD

        AND        PRIOR A.VLD_START_DT = A.VLD_START_DT

        ORDER SIBLINGS BY A.SORT_SEQN




=================================== -> 변경 중인 쿼리



SELECT

              '' AS "_CHK" 

              ,A.HRNK_DEPT_CD

              ,A.DEPT_CD

      ,B.DEPT_NM

              ,A.SORT_SEQN

              ,CASE WHEN A.HR_USE_YN       = 'Y' THEN '1' ELSE '0' END AS HR_USE_YN

              ,A.VLD_START_DT

              ,A.REMARK_TEXT

              ,(SELECT AA.CC_CD 

                FROM   HR_DEPT_CC AA

                WHERE  AA.DEPT_CD = A.DEPT_CD

                AND    A.VLD_START_DT BETWEEN AA.VLD_START_DT AND NVL(AA.VLD_END_DT, '99991231')

                AND    AA.VLD_START_DT = (SELECT MAX(VLD_START_DT)

                                          FROM   HR_DEPT_CC

                                          WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                                          AND    DEPT_CD = A.DEPT_CD)) AS CC_NM

              ,(SELECT HR_GET_EMPNM_FN(EMPNO)

                FROM   HR_DEPT_TMGR

                WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                AND    DEPT_CD = A.DEPT_CD

                AND    VLD_START_DT = (SELECT MAX(VLD_START_DT)

                                       FROM   HR_DEPT_TMGR

                                       WHERE  A.VLD_START_DT BETWEEN VLD_START_DT AND NVL(VLD_END_DT, '99991231')

                                       AND    DEPT_CD = A.DEPT_CD)) AS DEPT_EMP_NM 

FROM   HR_ORGC_D AS A LEFT OUTER JOIN HR_DEPT_C B

               ON A.DEPT_CD = B.DEPT_CD

               JOIN 

               (SELECT MAX(VLD_START_DT) AS VLD_START_DT

                FROM   HR_ORGC

                WHERE  1 = 1

                AND VLD_START_DT = '20191010'

                ) AS C

                ON A.VLD_START_DT = C.VLD_START_DT






조인까지는 변경 했는데...

계층 구조는 이해가 잘 안되네요... 도와주십쇼 ..

0
0