오늘 일하는 중 단순 조회에서 막혀버렸다.

'ORA-00913: 값의 수가 너무 많습니다'

원래 내가 알고있는게 맞다면 위의 오류는 INSERT 할때 입력값의 개수랑 입력받는 컬럼 개수가 다를 때 나는 쿼리인데

SELECT 할 때 나타나서 벙찌고 있었다.

사용한 쿼리는 아래와 같다.

SELECT 
  B.CITY,
  APT,
  EQIP_NM,
  MEMO
FROM 
  APT_CD A,
  (
    SELECT 
      CITY,
      APT_CD,
      EQIP_CD,
      MEMO
    FROM 
      EQIP
    WHERE CITY IN ('23','24','25','26')
    AND EQIP_CD NOT IN
      (
        SELECT 
          CITY,
          EQIP_CD
        FROM DSCHQTY
        WHERE CITY  IN ('23','24','25','26')
        AND DTTM >= TO_DATE(20140205,'YYYYMMDD')
        GROUP BY CITY, EQIP_CD
      )
    AND DEL='N'
  ) B
WHERE A.CITY = B.CITY
AND A.APT_CD(+) = B.APT_CD
ORDER BY CITY, EQIP_CD;

▲ 이 쿼리는 실제 사용한 쿼리와 조금 다릅니다. 컬럼명이라던가 컬럼명이라던가 컬럼명이...


10분정도 뒤져봐도 뭐가 잘못됬는지 확인이 안되다가

차 한잔 마시고 진정하고 다시 확인해보니 어머! 서브쿼리가 문제네!?

해결한 쿼리는 아래와 같다.

SELECT 
  B.CITY,
  APT,
  EQIP_NM,
  MEMO
FROM 
  APT_CD A,
  (
    SELECT 
      CITY,
      APT_CD,
      EQIP_CD,
      MEMO
    FROM 
      EQIP
    WHERE CITY IN ('23','24','25','26')
    AND EQIP_CD NOT IN
      (
        SELECT 
          EQIP_CD
        FROM DSCHQTY
        WHERE CITY  IN ('23','24','25','26')
        AND DTTM >= TO_DATE(20140205,'YYYYMMDD')
        GROUP BY CITY, EQIP_CD
      )
    AND DEL='N'
  ) B
WHERE A.CITY = B.CITY
AND A.APT_CD(+) = B.APT_CD
ORDER BY CITY, EQIP_CD;


수정한 부분은 조건절의 

    AND EQIP_CD NOT IN
      (
        SELECT 
          CITY_ARCD,
          EQIP_CD
        FROM DSCHQTY
        WHERE CITY  IN ('23','24','25','26')
        AND DTTM >= TO_DATE(20140205,'YYYYMMDD')
        GROUP BY CITY, EQIP_CD
      )

바로 이 부분.

조건을 비교하는건 EQIP_CD 하나인데, 서브쿼리에서 두개를 불러와서 생긴 오류였다.

진짜 간단한건데... 이런에데서 실수하니 그저 벙찔뿐....

이런 실수는 또 찾기도 어렵다 찐발...

블로그 이미지

광훨

,