2009-09-21 6 views
1

대출에 대한 정보를 되돌리고 싶습니다. 하나의 정보는 특정 수수료 금액입니다. 대출 수와 수수료 금액에 대한 내 쿼리를 단순화하면 여전히 파악할 수 없습니다. 첫 번째 쿼리는 내가 기대하는 것을 반환합니다. 하나는 대출 번호이고 0은 수수료 금액입니다 (수수료가 적용되지 않았습니다). 두 번째 쿼리는 사랑이나 돈을 위해 일할 수 없습니다. 적용하려고하는 조인 유형에 관계없이 빈 결과 집합 만 반환합니다. 차이가 나는 경우 SQL Server 2005 사용.
감사합니다.또 다른 가입 질문

환호 지금이 작동하지 않는 하나입니다

select 
    tblLoan.loanID as LoanNumber 
,isnull(tblgfe1300.gfe1300feeTot,0) as RepairFunds 
from 
    tblLoan 
LEFT JOIN tblgfe1300 on tblgfe1300.loanID = tblLoan.loanID AND tblgfe1300.gfe1300FeeName = 'Escrow Holdback' 
WHERE tblLoan.loanID = '3250000167' 

밥.

select 
    tblLoan.loanID as LoanNumber 
    ,isnull(tblgfe1300.gfe1300feeTot,0) as RepairFunds 
from 
    tblLoan 
    LEFT JOIN tblgfe1300 on tblgfe1300.loanID = tblLoan.loanID 
where 
    tblLoan.loanID = '3250000167' 
    AND tblgfe1300.gfe1300FeeName = 'Escrow Holdback' 
+0

.... 같은 가입 질문! :-) –

답변

1

나는 테이블 tblgfe1300, 당신은 지정된 ID와 feename = "에스크로 홀드 백 '에 대한 기록이 없다고 생각합니다.

첫 번째 쿼리가 결과를 반환하는 이유는 gfe1300FeeName 열의 조건이 '접합 시간'에 발생하고 왼쪽 조인을 사용하기 때문에 모든 결과가 결과 집합에 포함됩니다. 그런 다음 결과 집합은 Id에서 필터링되고 gfe1300FeeName 열은 더 이상 고려되지 않습니다.

두 번째 쿼리에서 두 번째 열은 조인이 적용된 후 고려됩니다. 따라서 지정된 ID에 대해 하나의 레코드가 있지만 gfe1300FeeName 열의 값이 '에스크로 보류'가 아니면 해당 레코드는 결과 집합에서 제외됩니다.

+0

나를 이길 때, 그냥 이런 식으로 타이핑하는 것입니다. – cfeduke

+0

결과 집합을 필터링하는 타이밍에 대한 설명 주셔서 감사합니다. 나는 지금 무슨 일이 벌어지고 있는지 이해한다. 그래서 내가하려는 일을 성취 할 수있는 더 좋은 방법이 있습니까? 아니면가는 첫 번째 방법입니다. –

0

조인에 아무런 영향이없는 경우 여전히 결과에 tbl.loanID이 있습니다. 그러나 WHERE으로 필터링하면 결과가 없습니다.

첫 번째 쿼리에 WHERE tblgfe1300.gfe1300FeeName = 'Escrow Holdback'을 추가하면이 사실을 확인할 수 있습니다. 그러면 아무 것도 얻을 수 없습니다.

0

이 쿼리 :

select L.loanID LoanNumber, 
    isnull(F.gfe1300feeTot, 0) RepairFunds 
from tblLoan L 
    LEFT JOIN tblgfe1300 F 
     on F.loanID = L.loanID 
where L.loanID = '3250000167' 
    AND F.gfe1300FeeName = 'Escrow Holdback' 

반환하지 행의 F.gfe1300FeeName식이 Where 절에서가 아니라 가입에 있기 때문에.

외부 조인을 사용하는 경우 조인 조건이 적용되고 (행은 일치하지 않음) 외부 조인의 내부쪽에 있지만 '외부'테이블의 일치하는 행이없는 모든 행이 적용됩니다 '측이 다시 추가되지만 외부 테이블의 [존재하지 않는] 행에서 가져온 모든 열에 대해 NULL 값이 있습니다. 그런 다음 (외부 테이블 tblgfe1300의 열을 필터링하기 때문에) Where (NULL) 값이 'Escrow Holdback'과 같지 않기 때문에 Where 절은 해당 행을 필터링합니다.

+0

그대로 커버 밑에서 무슨 일이 일어나고 있는지에 대해 매우 감사드립니다. 그것이 나를 죽이면 나는이 물건을 얻을 것이다. 건배 bob –