首页 >数据库 >mysql教程 >为什么我的左外连接返回的记录比左表多?

为什么我的左外连接返回的记录比左表多?

Barbara Streisand
Barbara Streisand原创
2025-01-25 01:11:08139浏览

Why Does My Left Outer Join Return More Records Than the Left Table?

左外连接和意外行计数:仔细观察

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn