首页 >数据库 >mysql教程 >LEFT OUTER JOIN 谜题:为什么结果多于左表记录?

LEFT OUTER JOIN 谜题:为什么结果多于左表记录?

DDD
DDD原创
2025-01-25 01:26:09480浏览

LEFT OUTER JOIN Puzzle: Why More Results Than Left Table Records?

LEFT OUTER JOIN 难题:记录数超过左表?

虽然普遍认为 LEFT OUTER JOIN 总是返回左表的所有记录,但一位用户却对查询返回的结果数量超过预期感到困惑。

有问题的 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>

揭开真相:

误解在于假设 LEFT OUTER JOIN 只会为左表中不匹配的行返回 NULL 值。实际上,它会返回所有匹配的行,即使右表中的多行与左表中的一行匹配也是如此。

示例说明:

考虑以下表格:

**Susp_Visits** **Dim_Member**
MemID: 1 MembershipNum: 1
MemID: 1 MembershipNum: 2
MemID: 2 MembershipNum: NULL

基于 MemID 的 LEFT OUTER JOIN 将产生以下结果:

**SuspReason** **SiteID** **MembershipNum**
1 1 1
1 1 2
2 2 NULL

正如您所看到的,Susp_Visits.SuspReason 为 1 的行被重复,因为它与 Dim_Member 中的两行匹配。

替代方法:

如果所需结果只是检索左表中唯一行,则不需要 LEFT OUTER JOIN。只需从左表中进行简单的 SELECT 即可:

<code class="language-sql">SELECT     
    SuspReason, SiteID
FROM
    SUSP.Susp_Visits</code>

以上是LEFT OUTER JOIN 谜题:为什么结果多于左表记录?的详细内容。更多信息请关注PHP中文网其他相关文章!

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