2015-01-29 2 views
1

다음 쿼리의 테이블 중 하나에 데이터가 없습니다. 내 결과 집합이 비어 있습니다. 그러나 NVL() FUNCTION을 사용하려고합니다. 여전히 빈 세트를 제공합니다. 누군가이 동작을 이해하는 데 도움을 줄 수 있습니까? 내 기대는 '0'을 표시하는 것이 었습니다. 점점 빈 결과. 나는 오라클 11g를 사용하고 있습니다.Oracle 11g의 NVL 기능

SELECT NVL(T8.COLLECTION_BALANCE_AMT, 0) 
     from BV_COLLECTION_CLAIM T8 JOIN BV_CLAIM_LIABLE_INDV T2 
     ON T8.CLAIM_ID = T2.CLAIM_ID 
     JOIN BV_CLAIM_RECOVERY T3 
     ON T8.CLAIM_ID = T3.CLAIM_ID 
+1

음, 사실 행이 돌아오고있다 : 당신은을 존재하지 않는 일치하는 곳에있는 조인 된 테이블의 컬럼에 대한 null을 반환하는 left join을 찾고? NVL은 행에 null 값이 있고 존재하지 않는 행이 아닙니다. – OldProgrammer

+0

지금 내가 올바른지 이해했다면 행. – frlan

+0

글쎄, 분명히 JOIN 작업이 성공하는 행이 없으므로 행이 반환되지 않습니다. 대신'NVL()'을'T8.CLAIM_ID'로 변경하면 행을 되 찾을 수 있습니까? 조건에 맞는 데이터가 없으면 아무 데이터도 얻을 수 없습니다. –

답변

1

join은 일치하는 행만 반환합니다.

SELECT NVL(T8.COLLECTION_BALANCE_AMT, 0) 
FROM  BV_COLLECTION_CLAIM T8 
LEFT JOIN BV_CLAIM_LIABLE_INDV T2 -- here! 
     ON T8.CLAIM_ID = T2.CLAIM_ID 
LEFT JOIN BV_CLAIM_RECOVERY T3 -- here too! 
     ON T8.CLAIM_ID = T3.CLAIM_ID