2

我有两个表,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 中有记录的记录。

这正在杀死我,我确定我错过了一些愚蠢的东西......希望有人能帮忙?

4

1 回答 1

5

该条件被应用于连接的结果,而不是首先应用于表。如果您将您的条件作为 JOIN 的一部分,您会将 tblBill 记录限制为您的条件,然后连接到客户端表。

SELECT *
FROM   tblClient 
       LEFT JOIN tblBill
         ON tblClient.cltID = tblBill.cltid
            AND tblbill.billDtm between @dtStart and @dtEnd
于 2012-11-28T22:58:45.327 回答