2

cltID で結合された tblClient と tblBill の 2 つのテーブルがあります。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 に答える