首页 > 数据库 > mysql教程 > 为什么我的 PostgreSQL LEFT JOIN 查询会乘以计数而不是保留它们?

为什么我的 PostgreSQL LEFT JOIN 查询会乘以计数而不是保留它们?

Linda Hamilton
发布: 2025-01-23 12:23:10
原创
420 人浏览过

Why Does My PostgreSQL LEFT JOIN Query Multiply Counts Instead of Preserving Them?

PostgreSQL LEFT JOIN:意外的行数乘法

使用多个 LEFT JOIN 的 PostgreSQL 9.1 查询意外地增加了行数,而不是保留它们。 该查询旨在检索用户 ID、帐户余额、杂货店访问计数和鱼市访问计数。 有缺陷的查询导致计数不正确,显示重复值而不是实际计数。

此问题是由 PostgreSQL 从左到右的 JOIN 处理顺序引起的。 后续联接会复制早期联接中的行,从而导致计数膨胀。例如,如果访问杂货店 3 次,鱼市访问 12 次,则结果错误地显示每次访问 12 个条目,而不是预期的 3 个和 12 个。

解决方案包括在加入之前预先汇总访问次数。 这避免了行乘法问题。更正后的查询是:

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;
登录后复制

此修改后的查询正确返回每个用户访问杂货店和鱼市的个人计数,解决了乘法问题。 例如,如果用户访问了 3 次杂货店和 4 次鱼市,输出会准确反映这一点,避免原始查询中出现的错误重复。

以上是为什么我的 PostgreSQL LEFT JOIN 查询会乘以计数而不是保留它们?的详细内容。更多信息请关注PHP中文网其他相关文章!

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