2009-09-21 85 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

....又一次的同樣的連接問題! :-) – 2009-09-21 21:40:54

回答

1

我相信,在表tblgfe1300,你有指定的ID和feename =「中介回扣」沒有記錄。

第一個查詢返回結果的原因是gfe1300FeeName collumn上的條件發生在'jointime',並且由於您使用了左連接,因此所有結果都將包含在結果集中。 然後,結果集在Id上被過濾,並且gfe1300FeeName列不再被考慮。

在第二個查詢中,第二列在應用連接後被考慮。 因此,如果您有指定Id的一條記錄,但gfe1300FeeName列中的值不是'Escrow Holdback',那麼該記錄將被排除在結果集之外。

+0

擊敗我,只是打字這樣的事情。 – cfeduke 2009-09-21 21:36:56

+0

感謝您對結果集過濾時間的解釋。我明白現在發生了什麼。那麼有沒有更好的方法來完成我想要做的事情?或者是要走的第一條路。 – 2009-09-21 21:40:02

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)不等於「託管逆止器」

+0

非常感謝在封面下發生的事情。如果它殺了我,我會得到這個東西。 歡呼聲 bob – 2009-09-21 21:44:32