2014-01-13 2 views
2

확인 :내가 오류를 던지고 오라클 SQL 쿼리가 단일 행 부질의 오류

ORA-01427: single-row subquery returns more than one row 
01427. 00000 - "single-row subquery returns more than one row" 
*Cause:  
*Action: 

나는이 오류를 방지하기 위해 무엇을 할 수 있는가? 이 오류의 원인/원인을 확인하려면 어떻게해야합니까?

select (select CID 
      from SPL A 
      where A.prodid = appl.prod_id 
        and A.STATUS = 'SET' 
        and A.DT = (select min(DT) from SPL B where A.prodid = B.prodid)) 
      as CIDORIG 
    from prod_master appl 
    where prod_status = 'OFF'; 

그러나, 내 SQL 문에 이러한 하위 쿼리를 찾을 수 없습니다 :

다음은 SQL 쿼리입니다. MIN()은 하나의 결과 만 반환합니다. 또한 '='기호를 키워드 IN으로 바꾸려고 시도했지만 행운이 없습니다. 이 쿼리는 다른 prod_status 값에 대해 작동합니다.

오류가 발생하기 전에 예상 한 15,648 개의 행 중에서 13,700 개의 행을 가져옵니다. SQL Developer는 한 번에 50 개의 행만 반환하도록 구성되어 있으므로 15,648 개의 행이 필요합니다. "Count Rows"옵션을 선택하면 15,648이라는 숫자가 표시됩니다.

SPL 및 prod_master는 모두보기입니다.

답변

3

아마도 둘 이상의 행을 반환하는 하위 쿼리는 다음과 같습니다

 (select CID 
     from SPL A 
     where A.prodid = appl.prod_id 
       and A.STATUS = 'SET' 
       and A.DT = (select min(DT) from SPL B where A.prodid = B.prodid) 
    ) as CIDORIG 

이 문제를 해결하려면, min(CID) 또는 max(CID)을 선택하십시오.

0

하위 쿼리가 1 또는 0 행을 반환 할 것이 확실한 경우에만 스칼라 하위 쿼리를 사용하십시오. 그렇지 않으면이 오류가 발생합니다.

당신은 당신이

select a.CID 
    from prod_master appl 
     join SPL A 
     on (A.prodid = appl.prod_id) 
    where appl.prod_status = 'OFF' 
    and A.STATUS = 'SET' 
    and A.DT = (select min(b.DT) 
        from SPL B 
       where A.prodid = B.prodid); 
을 다음과 같이 스칼라 서브 쿼리를 사용하지 않고 쿼리를 작성할 수 있습니다
관련 문제