LEFT OUTER JOIN 如何返回比左表中更多的记录?

新手上路,请多包涵

我有一个非常基本的 LEFT OUTER JOIN 来返回左表中的所有结果以及来自更大表的一些附加信息。左表包含 4935 条记录,但是当我将其 LEFT OUTER JOIN 连接到另一个表时,记录数要大得多。

据我所知,LEFT OUTER JOIN 将返回左表中的所有记录以及右表中的匹配记录以及任何无法匹配的行的空值,这绝对是福音,因此我的理解是它应该不可能返回比左表中存在的行更多的行,但它的发生都是一样的!

SQL查询如下:

 SELECT     SUSP.Susp_Visits.SuspReason, SUSP.Susp_Visits.SiteID
FROM         SUSP.Susp_Visits LEFT OUTER JOIN
                      DATA.Dim_Member ON SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum

也许我在语法上犯了错误,或者我对 LEFT OUTER JOIN 的理解不完整,希望有人能解释这是怎么发生的?

原文由 Jay Wilde 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 428
2 个回答

LEFT OUTER JOIN 将返回 LEFT 表中的所有记录,并尽可能与 RIGHT 表连接。

如果有匹配,它仍然会返回所有匹配的行,因此,LEFT 中的一行匹配 RIGHT 中的两行将返回为两个 ROWS,就像 INNER JOIN 一样。

编辑:作为对您的编辑的回应,我刚刚进一步查看了您的查询,看起来您只是从 LEFT 表中返回数据。因此,如果您只需要 LEFT 表中的数据,并且只希望 LEFT 表中的每一行返回一行,那么您根本不需要执行 JOIN,可以直接从 LEFT 表中执行 SELECT。

原文由 Robin Day 发布,翻译遵循 CC BY-SA 2.5 许可协议

您的查询将返回比左表更多的行数(在您的情况下为 SUSP.Susp_Visits )的唯一方法是条件( SUSP.Susp_Visits.MemID = DATA.Dim_Member.MembershipNum )匹配右侧的多行表,即 DATA.Dim_Member 。因此, --- 中有多行,其中 DATA.Dim_Member DATA.Dim_Member.MembershipNum 相同的值。您可以通过执行以下查询来验证这一点:

select DATA.Dim_Member.MembershipNum, count(DATA.Dim_Member.MembershipNum) from DATA.Dim_Member group by DATA.Dim_Member.MembershipNum

原文由 Binita Bharati 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进