2012-04-11 5 views
2

RepDailyInfoテーブルから日付を取得しようとしています。RepDailyCollection.IsReceived = 0RepDailyCollectionにその特定のレコードがある場合RepDailyInfoIDです。これはSQL Server 2005で可能ですか?左外部結合を使用しているときにレコードが存在しない場合でも、行を返します。

Select distinct RepDailyInfo.Date 
from RepDailyInfo 
left outer join RepDailyCollection c 
    on c.RepDailyInfoID = RepDailyInfo.RepDailyInfoID 
where c.IsReceived = 0 
    or c.IsReceived = null 

答えて

1

そうあなたが見つけるために参加する必要があるため、参加のON句に条件を移動しますWHERE句で参照される行の行:「または」よりも優先されますので、

Select distinct RepDailyInfo.Date 
from RepDailyInfo 
left outer join RepDailyCollection c 
    on c.RepDailyInfoID = RepDailyInfo.RepDailyInfoID 
    and (c.IsReceived = 0 or c.IsReceived is null) 

はまた、SQLで必要とされているor、周りの括弧の使用を注意してください「と」と括弧のないあなた"(AとB)またはC"で終わる

+0

ありがとうございました!私は、Outer joinで 'and'条件を書くことができることを知りません。知っておもしろい。再度、感謝します!! :-) – Ram

+1

問題ありません。実際には、このテクニックは非常に便利で、Hibernateが**できないことがあります。これは、HQLの代わりにネイティブのSQLクエリを使用する必要があります。 – Bohemian

+1

@ram私は、 'c.IsReceived = null'は' c.IsReceived is null'であるべきだと思います。 –

0

やりたいことがありますが、それ自体への参加で参加の右側にフィルタリングする必要があります:WHERE句がOUTER JOIN後にフィルタリングされ

Select distinct RepDailyInfo.Date 
from RepDailyInfo 
left outer join RepDailyCollection c 
    on c.RepDailyInfoID = RepDailyInfo.RepDailyInfoID 
    and (c.IsReceived = 0 
    or c.IsReceived is null) 
0

を。あなたがその振る舞いをしたくない場合は、このようなJOINON句へWHERE句を移動:

select distinct r.date 
from RepDailyInfo r 
left outer join RepDailyCollection c on c.RepDailyInfoID = r.RepDailyInfoID 
    and isnull(c.IsReceived, 0) = 0 
関連する問題