左外连接和意外行计数:仔细观察
在 SQL 数据库中,左外连接组合来自两个表的数据,保证结果集中包含左表中的所有行。 然而,一个常见的误解是输出总是与左表具有相同的行数。这不一定是真的。
左外连接的行为是将左表中的每一行与右表中的相应行进行匹配。 如果找到匹配项,则两个表中的数据将合并为一行。 至关重要的是,如果在右表中找到左表中给定行的 no 匹配项,则该左表行仍包含在结果中,但右表中的列具有 NULL
值.
当左表中的单行与右表中的多个行匹配时,就会出现差异。 在这种情况下,左外连接将在输出中生成多行,右侧每匹配一行,导致行数超过原始左表的行数。
让我们用一个 SQL 查询示例来说明:
<code class="language-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</code>
此查询旨在仅从 SUSP.Susp_Visits
检索数据。 但是,如果 MemID
中的 SUSP.Susp_Visits
对应于 DATA.Dim_Member
中的多个条目,则结果将包含每个此类 SUSP.Susp_Visits
行的多行。
为了避免这种膨胀的行数并仅检索左表中的数据,最好使用更简单的查询:
<code class="language-sql">SELECT SuspReason, SiteID FROM SUSP.Susp_Visits</code>
这种直接查询可以有效地检索所需的数据,而在处理表之间的一对多关系时,不会出现左外连接行为固有的行计数差异。
以上是为什么我的左外连接返回的记录比左表多?的详细内容。更多信息请关注PHP中文网其他相关文章!