03.업/11.디비

오라클 다건 서브쿼리와 CROSS JOIN

봄날의차 2021. 12. 2. 14:52

SELECT B1.ROM_NO, (SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= ( SELECT B2.ROM_SE 
                                                  FROM TABLE1 B2 /* 호실관리 */
                                                 WHERE B2.YEAR_SE = B1.YEAR_SE
                                                   AND B2.SEMSTR_CODE = B1.SEMSTR_CODE
                                                   AND B2.BULD_CODE = B1.BULD_CODE
                                                   AND B2.ROM_NO = B1.ROM_NO
                                                   ) 
                                                   ) AS J_KEY
  FROM TABLE1 B1 /* 호실관리 */
 WHERE B1.YEAR_SE = '2021'
   AND B1.SEMSTR_CODE = '20'
   AND B1.BULD_CODE = '11'
   AND B1.ROM_NO = 'J1000'

오라클은 서브쿼리가 다건이라는 에러가 나서 이런경우 CROSS JOIN 을 사용해서 해결한다.

 

SELECT A.ROM_NO
     ,   B.J_KEY
  FROM ( SELECT B1.ROM_NO
              , B1.ROM_SE
           FROM TABLE1 B1 /* 호실관리 */
          WHERE B1.YEAR_SE = '2021'
            AND B1.SEMSTR_CODE = '20'
            AND B1.BULD_CODE = '11' ) A
 CROSS JOIN (SELECT LEVEL AS J_KEY FROM DUAL CONNECT BY LEVEL <= 10 ) B
 WHERE A.ROM_SE >= B.J_KEY

 

CROSS JOIN (SELECT LEVEL AS J_KEY FROM DUAL CONNECT BY LEVEL <= 10 ) B

진짜는 이부분을 
CROSS JOIN (SELECT LEVEL AS J_KEY FROM DUAL CONNECT BY LEVEL <= B1.ROM_SE ) B
이렇게 바꾸고 싶은건데 이건 안되네 그냥 최대값을 지정해서 구하고 필요한 값만큼 사용하는 걸로 만족해야 하나 보다.