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

MySQL中如何按日期关联不同字段的两张表获正确结果?

MySQL按日期关联字段不同的两张表问题

现有两张表数据:

表raddb.Reg_Residual

AQuenteSanAFriaSanRealizacao
0.580.612023-11-14
0.520.642023-11-15

表raddb.Reg_Dioxido

dioxcloroRealizacao
0.022023-11-14
0.102023-11-15

尝试执行以下SQL时得到笛卡尔积结果:

WITH
exp1 AS (SELECT AQuenteSan, AFriaSan, Realizacao FROM raddb.Reg_Residual WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15'),
exp2 AS (SELECT dioxcloro, Realizacao AS Realizacao1 FROM raddb.Reg_Dioxido WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15')
SELECT DISTINCT * FROM exp1 JOIN exp2;

期望得到按日期匹配的结果:

AQuenteSanAFriaSanRealizacaodioxcloroRealizacao1
0.580.612023-11-140.022023-11-14
0.520.642023-11-150.102023-11-15

解决方法

问题核心是未指定JOIN的关联条件,导致数据库返回两张表的所有组合(笛卡尔积)。只需在JOIN后添加ON子句,通过日期字段匹配数据即可。

方案1:保留原SQL的字段重命名

如果需要保留Realizacao1字段,关联条件使用两张表的日期字段匹配:

WITH
exp1 AS (SELECT AQuenteSan, AFriaSan, Realizacao FROM raddb.Reg_Residual WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15'),
exp2 AS (SELECT dioxcloro, Realizacao AS Realizacao1 FROM raddb.Reg_Dioxido WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15')
SELECT * FROM exp1 JOIN exp2 ON exp1.Realizacao = exp2.Realizacao1;

方案2:简化SQL(无需重命名日期字段)

如果不需要重复的日期字段,可以直接用原字段关联,减少冗余:

WITH
exp1 AS (SELECT AQuenteSan, AFriaSan, Realizacao FROM raddb.Reg_Residual WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15'),
exp2 AS (SELECT dioxcloro, Realizacao FROM raddb.Reg_Dioxido WHERE Realizacao BETWEEN '2023-11-14' AND '2023-11-15')
SELECT exp1.AQuenteSan, exp1.AFriaSan, exp1.Realizacao, exp2.dioxcloro FROM exp1 JOIN exp2 ON exp1.Realizacao = exp2.Realizacao;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 13:05:25