我正在使用SQL Server(我相信它是2005)。SQL Server:左連接導致行數少於左表
我有TableA
有2列和439行(每行是唯一的)。
+----------+
|ID | Name |
+----------+
我有TableB
有35列和多幾十萬行(每行也是唯一的)。
+------------------------------------------------------------------------------+
|Date | ID | Name | Blah1 | Blah2 | ... | Hour1 | Hour2 | Hour3 | ... | Hour24 |
+------------------------------------------------------------------------------+
每一行中TableB
具有每小時的觀測數據和其他一些看家信息。現在出於測試目的,我只對今天的日期感興趣,即2013年4月19日。
如果我做的:
Select count(*)
from TableB
where Date = '4/19/2013 12:00:00 AM'
我得到10526,因爲有10526個其中的每一天有每小時觀測數據不同的位置這是正確的。
我想要左連接表A和表B on 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'
可以顯示你使用的完整查詢 – PSR 2013-04-20 04:29:24
@PSR - 我編輯了我原來的帖子,包括使用的原始查詢。 – codingknob 2013-04-20 04:41:40
重新措辭@LoztInSpace寶貴的評論:在JOIN之前添加約束(使用WHERE)到選擇表。否則,這些約束作用於連接的結果輸出(並且可以將行數減少到比原始表更少)。 – 2015-03-26 03:26:53