首页 >数据库 >mysql教程 >为什么我的 LEFT OUTER JOIN 返回的行数多于左表中存在的行数?

为什么我的 LEFT OUTER JOIN 返回的行数多于左表中存在的行数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-25 01:22:09994浏览

Why Does My LEFT OUTER JOIN Return More Rows Than Exist in the Left Table?

左外的联接意外行为:行比左表

更多

>关于左外联接的常见误解是结果集将始终具有比左表的行相同或更少的行。 但是,这并不总是正确的。 在特定条件下,行的数量可以超过左表的行计数。

>

在查询中使用“ suss.susp_visits”(左表)和“ data.dim_member”(右表)之间观察到了此问题。连接结果的行比“ sussp_visits”中的4935行。

>

理解左外联合

>

左外联接功能如下:

  • 包括所有>从左表的行。
  • >
  • >对于每个左表行,它根据联接条件在右表中搜索匹配行。
  • 如果找到了匹配,则包括对应的右表行。
  • >
  • 如果找不到匹配,则返回右表的列返回零值。
>

为什么出现多余的行

额外的行不是通过复制左表行创建的,而是通过右表的结构来创建。 右表(“ data.dim_member”)中

多个行时出现的问题是出现的。 例如,如果“ sussp_visits”中的“ memid”对应于“ data.dim_member”中的多个“成员”值,则联接将为该左表行产生多个输出行,从而增加整个行计数。 solutions

避免在左外联机中的这一行充气:

限制选择:

从左表中仅选择列。 这可以保证输出行计数不会超过左表的行计数。

    >
  • >使用内部加入:如果您只需要在两张表之间存在匹配的地方行,则内部连接更合适。 这将消除右侧多个匹配的额外行。>

以上是为什么我的 LEFT OUTER JOIN 返回的行数多于左表中存在的行数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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