我正在使用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