当前位置: 首页 > 面试题库 >

SQL Server:左联接所产生的行少于左表中的行

鲜于致远
2023-03-14
问题内容

我正在使用SQL Server(我相信是2005)。

我有TableA2列和439行(每行都是唯一的)。

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

我有TableB35列和数十万行(每行也是唯一的)。

+------------------------------------------------------------------------------+
|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个不同的位置,每小时都有观测数据。

我想左连接TableA和TableB 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'

问题答案:

试试这个:

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')


 类似资料:
  • 它还会返回这个表,遗漏一些行(我希望它给出所有流派,而不仅仅是演员在其中扮演角色的流派): 有趣的是,它为“动画”返回了“0”,但为“儿童”或“喜剧”没有行,这是我正在寻找的结果(所有流派都返回了)。我做错了什么?

  • 问题内容: 我正在尝试使用以下查询获取每天打开的页面数。 我得到的输出是这样的: 问题是,在我的日表中,我有一列包含数字1到30来代表一个月中的日子。我进行了左外部连接,希望在天数列中显示所有天数! 但是我的查询正在这样做,为什么会这样呢? 谢谢大家的帮助。 问题答案: Nanne给出的答案解释了为什么您没有得到期望的结果(您的WHERE子句删除了行),但是却没有解决方法。 解决方案是将WHERE

  • 问题内容: 我正在尝试使用以下查询获取每天打开的页面数。 我得到的输出是这样的: 问题是,在我的日表中,我有一列包含数字1到30来表示一个月中的天数。我进行了左外部连接,希望在天数列中显示所有天数! 但是我的查询正在这样做,为什么会这样呢? 谢谢大家的帮助。 问题答案: 解决方案是将WHERE更改为AND,以便该条件成为联接条件的一部分,而不是联接之后应用的过滤器: 现在,左表中的所有行都将出现在

  • 问题内容: 根据我对左外部联接的了解,结果表的行数永远不应超过左表的行数…如果这是错误的,请让我知道… 我的左表是192572行和8列。 我的右边表格是42160行和5列。 我的左表有一个名为“ id”的字段,该字段与我的右表中名为“键”的一列匹配。 因此,我将它们合并为: 但是组合的形状是236569。 我有什么误会? 问题答案: 如果键与另一个DataFrame中的多个行匹配,则可以预期这种情

  • 根据我对左向外连接的理解,结果表的行永远不会比左表多...请让我知道如果这是错的... 我的左表是192572行8列。 我右边的表格是42160行和5列。 我的左表有一个名为“id”的字段,它与我的右表中名为“key”的列相匹配。 因此,我将它们合并为: 但是然后组合的形状是236569。 我有什么误会?

  • 问题内容: 我在MySQL中有以下查询: 该表有27行,但查询仅返回1行。基于 这个问题, 我认为可能是由于WHERE子句。该表具有字段id,属性,字段,值,其中是第三个表的外键(我不需要从中获取数据)。 有没有一种方法可以从第一个表中选择所有行,包括表#2中字段为23的值(如果没有字段23,则为NULL)? 问题答案: 当然。将WHERE条件移动到JOIN: