首页 > 数据库 > mysql教程 > 为什么我的两个 SQL LEFT JOINS 返回不正确的访问计数?

为什么我的两个 SQL LEFT JOINS 返回不正确的访问计数?

Barbara Streisand
发布: 2025-01-23 12:27:10
原创
261 人浏览过

Why Are My Two SQL LEFT JOINS Returning Incorrect Visit Counts?

调试 SQL LEFT JOIN:准确的访问计数

在 SQL 中使用多个 LEFT JOIN 来统计不同表的访问次数时会出现一个常见问题。 此示例使用三个表:usersgroceryfishmarket。 旨在统计每个用户对杂货店和鱼市场的访问次数的查询会产生不准确的结果。

问题源于连接的顺序性质。 一种简单的方法首先连接 usersgrocery,为每个具有非空 account_balance 的用户及其杂货店访问创建一行。 随后使用 fishmarket 进行连接,然后错误地将每个用户的杂货店访问计数乘以鱼市访问计数。 这导致访问总量膨胀。

解决方案涉及在将访问计数连接到users表之前重组查询以聚合访问计数。 这是使用两个相关子查询有效完成的。每个子查询独立地计算 groceryfishmarket 表的访问次数,并按 user_id 分组。 然后将这些聚合计数连接到 users 表,确保准确的访问总数。

这是使用子查询的更正查询:

<code class="language-sql">SELECT u.id, u.account_balance, g.grocery_visits, f.fishmarket_visits
FROM users u
LEFT JOIN (
    SELECT user_id, COUNT(*) AS grocery_visits
    FROM grocery
    GROUP BY user_id
) g ON g.user_id = u.id
LEFT JOIN (
    SELECT user_id, COUNT(*) AS fishmarket_visits
    FROM fishmarket
    GROUP BY user_id
) f ON f.user_id = u.id
ORDER BY u.id;</code>
登录后复制

此修改后的查询为每个用户提供准确、独立的杂货店和鱼市访问计数,解决了原始查询的乘法错误。

以上是为什么我的两个 SQL LEFT JOINS 返回不正确的访问计数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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