首页 > 数据库 > mysql教程 > 为什么我的左外连接不返回左表中的所有行?

为什么我的左外连接不返回左表中的所有行?

Patricia Arquette
发布: 2025-01-23 15:51:10
原创
617 人浏览过

Why Doesn't My Left Outer Join Return All Rows from the Left Table?

左外连接:确保从左表检索完整的数据

左外连接的一个常见误解是它们总是返回左表中的所有行。 这并不总是正确的。如果根据连接条件右表中不存在匹配行,则左表中的行将被忽略。

让我们用一个例子来说明这一点。 想象一个旨在计算特定用户 (open_id) 每日页面浏览量的查询:

<code class="language-sql">SELECT day.days, COUNT(*) AS views
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date))
WHERE tracking.open_id = 10
GROUP BY day.days</code>
登录后复制

此查询旨在显示所有日期及其相关的观看次数。 但是,如果 day 包含该月每一天的条目,但 tracking 缺少 open_id = 10 某些天的条目,则这些天将不会出现在结果中。

解决方案在于将 WHERE 子句条件合并到连接的 ON 子句中:

<code class="language-sql">SELECT day.days, COUNT(tracking.open_date) AS views
FROM day
LEFT OUTER JOIN tracking
ON day.days = DAY(FROM_UNIXTIME(open_date)) AND tracking.open_id = 10
GROUP BY day.days</code>
登录后复制

通过将 tracking.open_id = 10 移至 ON 子句,条件将成为连接本身的一部分,而不是连接后过滤器。这可确保包含 day 表中的所有行,其中 views 显示 0,表示 tracking 表中没有匹配条目的天数。 注意使用 COUNT(tracking.open_date) 而不是 COUNT(*) 来准确反映浏览量;即使右表中没有匹配的行,COUNT(*) 仍然会计算天数。

以上是为什么我的左外连接不返回左表中的所有行?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板