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