我想撤回有关贷款的信息。一条信息是一定的费用金额。如果我将查询简化为贷款数量和费用金额,我仍然无法弄清楚。第一个查询返回我期望的,一个贷款号码和一个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 =“escrow holdback”的记录。
第一个查询返回结果的原因是,您在gfe1300FeeName collumn上的条件发生在'jointime',并且由于您正在使用左连接,因此所有结果都将包含在结果集中。 之后,结果集将在Id上过滤,并且不再考虑gfe1300FeeName列。
在第二个查询中,在应用连接后会考虑第二列。 因此,如果您有一条指定Id的记录,但gfe1300FeeName列中的值不是'Escrow Holdback',那么该记录将被排除在结果集之外。
答案 1 :(得分:0)
如果联接无效,则结果中仍有tbl.loanID
。但是,如果您使用WHERE
进行过滤,那么您就没有结果。
您可以通过在第一个查询中添加WHERE tblgfe1300.gfe1300FeeName = 'Escrow Holdback'
来验证这一点,然后您也无法获得任何内容。
答案 2 :(得分: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子句中而不是Join中。
使用外连接时,应用连接条件(但没有行匹配),然后是外连接内侧的所有行,但在'外部'的表中没有匹配的行side被添加回来,但是对于应该来自外表中[不存在]行的所有列的NULL值。然后,(因为您正在对此外表tblgfe1300中的列进行过滤),您的Where子句会过滤掉那些行,因为那里的值(NULL)不等于'Escrow Holdback'