MSSQL - LEFT在RIGHT表中与空值连接

时间:2012-11-28 22:54:50

标签: sql sql-server

我有两个表,tblClient和tblBill,它们在cltID上连接。 tblClient中的某些cltID在tblBill中没有记录。我想从tblClient返回所有记录并加入日期范围内的tblBill记录。如果他们没有tblBill记录,我仍然想要返回该tblClient记录。

我正在跑步:

select *
from tblClient left outer join tblBill
on tblClient.cltID = tblBill.cltid
where tblbill.billDtm between @dtStart and @dtEnd
or tblbill.billDtm is null

如果我取出WHERE子句,它将返回所有内容。如果我将其添加回去,它只返回在tblBill中有记录的记录。

这是在扼杀我,我确定我错过了一些愚蠢的事情......希望有人可以提供帮助?

1 个答案:

答案 0 :(得分:5)

条件正在应用于连接结果,而不是表格。 如果您将条件作为JOIN的一部分,则将tblBill记录限制为您的条件,然后加入客户端表。

SELECT *
FROM   tblClient 
       LEFT JOIN tblBill
         ON tblClient.cltID = tblBill.cltid
            AND tblbill.billDtm between @dtStart and @dtEnd