select * from (
select row_number() over( order by REGI_DD desc ) as rNum, NO, REGI_DD,
(select FILE_NAME from EN_COM_BOARD where REAL_YN = 'Y' and
CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID ) as LOGO_FILE,
(select COMP_NM_KOR from EN_COM_BOOTH where REAL_YN = 'Y' and
CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID ) as COMP_NM,
(select APP_DEPT from EN_COM_BOOTH where REAL_YN = 'Y' and
CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID ) as APP_DEPT
from EN_COM_DR where REAL_YN = 'Y' and BRAND = '2'
) A where mod (rNum,2) = 0
위에 mssql 쿼리를 오라클 쿼리로 변경할려는데 ORA-01427 :라는 오류가 납니다. 인터넷에 찾아보니 IN을 써주라는데
자꾸 오류가 나네요 어디를 수정해야 할까요..? 알려주시면 감사하겠습니다.
select * from ( select row_number() over( order by REGI_DD desc ) as rNum, NO, REGI_DD, (select FILE_NAME from EN_COM_BOARD where REAL_YN = 'Y' and CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID AND ROWNUM = 1) as LOGO_FILE, (select COMP_NM_KOR from EN_COM_BOOTH where REAL_YN = 'Y' and CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID AND ROWNUM = 1) as COMP_NM, (select APP_DEPT from EN_COM_BOOTH where REAL_YN = 'Y' and CO_IDNUM = EN_COM_DR.CO_IDNUM and YEAR = EN_COM_DR.YEAR and REG_ID = EN_COM_DR.REG_ID AND ROWNUM = 1) as APP_DEPT from EN_COM_DR where REAL_YN = 'Y' and BRAND = '2' ) A where mod (rNum,2) = 0 ;
SELECT 절에서 사용하는 스칼라서브쿼리에서 반환되는 값이 1개의 로우이어야 하는데 여러개의 로우가 발생하는 경우가 있기 때문입니다.
위와 같이 하면 에러는 나지 않겠지만 WHERE 조건에 로우를 1개만 가져오도록 하였기 때문에 원하는 값이 오지 않고 잘못된 값이 올수 있으며..
만약 여러개의 값이 SELECT 된다해도 모두 같은 값이라면 SELECT 문을 다른 방법으로 만들어야 합니다.
또한 현재 서브쿼리에서 UNIQUE INDEX를 사용 할 수 없는 스칼라서브쿼리보다는 JOIN으로 쿼리를 바꾸는게 더 좋아보입니다..