You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL多表JOIN查询日期匹配异常问题及优化咨询

问题分析与解决方法

你的查询出现错误的核心原因有两个:

  1. JOIN关联条件不完整:你只通过c_project关联两张表,但同一个项目在不同日期有独立的计划和实际数据,必须同时匹配date才能保证行数据的对应关系。
  2. 多余的GROUP BY导致错误聚合:你并没有需要聚合的场景(比如求和、统计),GROUP BY在这里会强制将相同c_project和date的行合并,而由于你没有对actual指定聚合规则,数据库会默认取分组内的第一个值,这就是为什么所有行的actual都显示成第一个日期的30。

优化后的查询语句

SELECT 
    a.id,
    a.c_project,
    a.plan,
    b.actual,
    a.date
FROM plan AS a
JOIN actual AS b 
    ON a.c_project = b.c_project 
    AND a.date = b.date  -- 关键:添加日期匹配条件
ORDER BY a.date ASC;

为什么这样改?

  • 完善关联条件:通过c_project + date的组合匹配,确保plan表中每一行都能精准对应actual表中同一天同项目的行,这样2022-01-07的actual值35就能正确匹配到对应的计划行。
  • 移除不必要的GROUP BY:你的需求是合并两张表的对应行,不需要聚合操作,去掉GROUP BY后就能得到每行一一对应的正确结果。

执行这个语句后,输出结果就会和你期望的一致:

id c_project plan actual date
1 P001 20 30 2021-12-25
2 P001 25 35 2022-01-07

内容的提问来源于stack exchange,提问作者Identic 7

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 21:02:27