MySQL子查询关联currencies表失败:查询未返回币种表数据
问题分析与修正方案
嘿,我一眼就发现问题所在啦!你的查询其实已经成功关联了currencies表,但你压根没在主查询的SELECT子句里包含任何currencies表的字段,所以结果里只显示了子查询的currency_id和mindate,看起来就像没关联上一样。
另外还有个小问题:你的子查询里用SELECT *再配合GROUP BY currency_id不符合标准SQL规范(MySQL在非严格模式下虽然允许这么写,但可能会返回不确定的其他字段值),而且你其实只需要currency_id和最早投资日期,完全没必要查询所有字段。
给你修正后的查询语句:
SELECT T.currency_id, T.mindate, c.name -- 这里替换成你需要的currencies表字段,比如币种名称、代码等 FROM ( SELECT currency_id, MIN(DATE) AS mindate FROM investments GROUP BY currency_id ) AS T JOIN currencies c ON T.currency_id = c.currency_id ORDER BY T.mindate ASC;
关键修改点:
- 子查询简化:只保留分组需要的
currency_id和聚合后的mindate,避免不必要的字段查询,同时符合SQL规范。 - 主查询添加
currencies字段:在SELECT里明确写出你需要的currencies表字段(比如c.name),这样就能看到关联后的币种信息了。 - 调整排序位置:把
ORDER BY放到主查询里,子查询的排序对最终结果没有影响,反而会浪费性能。
内容的提问来源于stack exchange,提问作者Marcin Wasilewski
相关产品推荐
相关产品推荐

