OUTER JOIN에서 IN함 수사용 0 2 2,260

by 대궁이 [2013.06.27 01:47:54]


SELECT /* com.co.ComCoMngController.003 */
      RUC.NUMERO_RUC AS RUC ,
      RUC.RAZON_SOCIAL AS CMP_NM ,
      RUC.DIRECCION_PRESUNTA AS OCE_AD ,
      RUC.TELEFONO AS OCE_TL ,
      INF.USER_EM AS USER_EM ,
      INF.FAX_NO AS FAX_NO,
      DECODE (TRIM(RUC.PERSONA_SOCIEDAD) , 'PNL' , '002' , 'SCD' , '001' , '' ) AS PERSONA_SOCIEDAD
 FROM TA_IPT_RUC_SRI_INF RUC ,
      TA_IPT_USER_INF INF
WHERE RUC.NUMERO_RUC = INF.RUC(+)
      AND INF.USER_SE(+) IN ('002','005')
      AND RUC.NUMERO_RUC = '1701784900001';


해당 sql을 보시면 OUTER JOIN 에 IN 함수를 사용하고 있습니다.

현재 제 컴퓨터에는 11G가 깔려있는데 여기선 실행하면 오류가 나고요 다른 오라클에서는 위 SQL이 될때도 있네요

무슨 차이점이 있는지 알고 싶습니다.

기본적으로 OUTER JOIN 에서 IN 함수는 지원을 안하는것으로 알고 있습니다.
by OraJeon [2013.06.27 02:26:53]
11g 부터는 아우터조인시 in, or절에 대한 제약은 풀린걸로 알고 있습니다. 서브쿼리에 대한 제약은 여전히 존재하지만요.

by 마농 [2013.06.27 08:04:56]
-- 11g 에서 제약이 확실하게 풀린건지는 잘 모르겠어요.
-- 안되는 것도 있긴 한것 같습니다.
-- ANSI SQL 을 사용하시면 해결됩니다.
SELECT ...
  FROM ta_ipt_ruc_sri_inf ruc
  LEFT OUTER JOIN ta_ipt_user_inf inf
    ON ruc.numero_ruc = inf.ruc
   AND inf.user_se IN ('002', '005')
 WHERE ruc.numero_ruc = '1701784900001'
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입