私は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'
これを試して:
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')