1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | SELECT H.* FROM ( SELECT G.* ,ROW_NUMBER() OVER(PARTITION BY G.TOP_MENU_CD ORDER BY G.TOP_MENU_ORD, G.MID_MENU_ORD, G.MENU_ORD) ROWNUM1 , COUNT (*) OVER(PARTITION BY G.TOP_MENU_CD) AS CNT1 ,ROW_NUMBER() OVER(PARTITION BY G.TOP_MENU_CD, G.MID_MENU_CD ORDER BY G.TOP_MENU_ORD, G.MID_MENU_ORD, G.MENU_ORD) AS ROWNUM2 , COUNT (*) OVER(PARTITION BY G.TOP_MENU_CD, G.MID_MENU_CD) AS CNT2 FROM ( SELECT F.TOP_MENU_NM ,F.MID_MENU_NM ,F.MENU_NM ,F.MENU_CNT ,F.RECENT_DATE ,F.TOP_MENU_CD ,F.MID_MENU_CD ,F.MENU_CD ,F.TOP_MENU_ORD ,NVL(F.MID_MENU_ORD, 0) AS MID_MENU_ORD ,NVL(F.MENU_ORD, 0) AS MENU_ORD FROM ( SELECT B.TOP_MENU_CD ,C.MENU_NM AS TOP_MENU_NM ,C.MENU_ORD AS TOP_MENU_ORD ,B.MID_MENU_CD ,D.MENU_NM AS MID_MENU_NM ,D.MENU_ORD AS MID_MENU_ORD ,B.MENU_CD ,E.MENU_NM ,E.MENU_ORD ,B.MENU_CNT ,TO_CHAR(TO_DATE(B.RECENT_DATE, 'YYYYMMDDHH24MISS' ), 'YYYY-MM-DD HH24:MI' ) AS RECENT_DATE FROM ( SELECT A.TOP_MENU_CD ,A.MID_MENU_CD ,A.MENU_CD , SUM (A.MENU_CNT) AS MENU_CNT , MAX (TO_NUMBER(A.YMD || A.HMS)) AS RECENT_DATE ,A.LANG_CD FROM ( SELECT MENU_CD AS TOP_MENU_CD ,0 AS MID_MENU_CD ,0 AS MENU_CD ,MENU_CNT ,YMD ,HMS ,LANG_CD FROM TB_AOS WHERE YMD BETWEEN #{sdate} AND #{edate} AND LANG_CD = #{G_LANG_CD} AND TOP_MENU_CD = 0 AND LOG_GUBUN = #{logGubun} UNION ALL SELECT TOP_MENU_CD ,MENU_CD AS MID_MENU_CD ,0 AS MENU_CD ,MENU_CNT ,YMD ,HMS ,LANG_CD FROM TB_AOS WHERE YMD BETWEEN #{sdate} AND #{edate} AND LANG_CD = #{G_LANG_CD} AND TOP_MENU_CD <![CDATA[ <> ]]> 0 AND MID_MENU_CD = 0 AND LOG_GUBUN = #{logGubun} UNION ALL SELECT TOP_MENU_CD ,MID_MENU_CD ,MENU_CD ,MENU_CNT ,YMD ,HMS ,LANG_CD FROM TB_AOS WHERE YMD BETWEEN #{sdate} AND #{edate} AND LANG_CD = #{G_LANG_CD} AND TOP_MENU_CD <![CDATA[ <> ]]> 0 AND MID_MENU_CD <![CDATA[ <> ]]> 0 AND LOG_GUBUN = #{logGubun}) A GROUP BY A.TOP_MENU_CD, A.MID_MENU_CD, A.MENU_CD, A.LANG_CD) B ,TB_BBOS C ,TB_BBOS D ,TB_BBOS E WHERE B.LANG_CD = C.LANG_CD (+) AND B.LANG_CD = D.LANG_CD (+) AND B.LANG_CD = E.LANG_CD (+) AND B.TOP_MENU_CD = C.MENU_CD (+) AND B.MID_MENU_CD = D.MENU_CD (+) AND B.MENU_CD = E.MENU_CD (+)) F ORDER BY F.TOP_MENU_ORD, F.MID_MENU_ORD, F.MENU_ORD) G) H ORDER BY H.TOP_MENU_ORD, H.MID_MENU_ORD, H.ROWNUM1, H.ROWNUM2, H.MENU_ORD |
위의 JOIN쿼리를 RIGHT OUTER JOIN으로 바꾸고 싶은데..
알리아스 C D E 부분에서 OUTER JOIN으로 바꿔줬더니..에러가 납니다.
저렇게 1:1관계가 아닌 1:다 관계일 때 OUTER JOIN으로 어떻게 바꾸는지.. 조언 부탁드립니다.