左外连接和左表中的不完整数据
了解连接条件如何影响左外连接的结果至关重要。 条件放置不正确可能会导致左表中的数据不完整。
让我们检查一下这个查询:
<code class="language-sql">SELECT day.days, COUNT(*) AS opens 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
表有更多天,它也可能只显示几天。 问题出在WHERE
子句上。
连接条件ON day.days = DAY(FROM_UNIXTIME(open_date))
正确匹配天数。 但是,WHERE tracking.open_id = 10
在 连接之后过滤 ,删除 open_id = 10
表中没有 tracking
的任何日期。
要包含左表 () 中的 所有 day
天,无论 tracking
中的匹配项如何,请将 open_id
条件移至 ON
子句中:
<code class="language-sql">SELECT day.days, COUNT(*) AS opens 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
的条目。 这些天的 COUNT(*)
将返回 0。
以上是为什么我的左外连接只返回左表的部分数据?的详细内容。更多信息请关注PHP中文网其他相关文章!