17

私は SQL Server を使用しています (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 と TableB を LEFT JOIN したいのですがon a.id = b.id、これは 439 行の結果を生成する必要があります。

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

*編集*

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

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

2 に答える 2

32

これを試して:

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')
于 2013-04-20T04:50:36.093 に答える