web-dev-qa-db-ja.com

SQL Server:左結合の結果、左のテーブルよりも行が少なくなります

私はSQLServerを使用しています(2005年だと思います)。

2列439行のTableAがあります(各行は一意です)。

+----------+
|ID | Name |
+----------+

35列と数十万行のTableBがあります(各行も一意です)。

+------------------------------------------------------------------------------+
|Date | ID | Name | Blah1 | Blah2 | ... | Hour1 | Hour2 | Hour3 | ... | Hour24 |
+------------------------------------------------------------------------------+

TableBの各行には、1時間ごとの観測と、その他のハウスキーピング情報があります。テストの目的で、今日の日付、つまり2013年4月19日のみに関心があります。

私が行った場合:

Select count(*) 
from TableB 
where Date = '4/19/2013 12:00:00 AM'

私は10526を取得します。これは、毎日1時間ごとの観測データがある10526の異なる場所があるため正しいです。

TableAとTableBon a.id = b.idを左結合したいのですが、439行の結果を生成する必要があります。

残念ながら、結果には246行が含まれます。どうすればいいの? LEFT JOINは、TableAに一致があったかどうかに関係なく、TableBのすべての行を返すことを想定していませんか?

* [〜#〜]編集[〜#〜]*

私が使用した完全なクエリは次のとおりです。

select * 
from TableA as a
left join TableB as b on a.id = b.id 
where RealDate = '4/20/2013 12:00:00 AM'
14
codingknob

これを試して:

select * from TableA as a
left join (SELECT * from TableB where RealDate = '4/20/2013 12:00:00 AM') as b
on a.id = b.id 

またはこれ:

select * from TableA as a
left join TableB as b on (a.id = b.id AND RealDate = '4/20/2013 12:00:00 AM')
25
faisal