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

如何去除SQL查询中的嵌套子查询 简化语句获得目标结果集

等价无嵌套查询实现

你可以直接将CASE判断放到MAX聚合函数内,同时可将原FULL OUTER JOIN简化为LEFT JOIN(原查询WHERE条件已限定f.fruit_number非空,不需要全外连接),最终无嵌套查询写法如下:

SELECT
    f.fruit_number,
    MAX(CASE WHEN e.expiration_date IS NULL AND e.fruit_number IS NOT NULL THEN 1 ELSE 0 END) AS expirationDate
FROM fruits f
LEFT JOIN expiration e ON f.fruit_number = e.fruit_number
GROUP BY f.fruit_number
ORDER BY f.fruit_number

上述查询返回的结果和你原有嵌套写法的结果完全一致,逻辑等价,且更简洁易读。

临时表方案疑问解答

该方案和原有嵌套查询逻辑是完全等价的,本质是把原查询中优化器自动完成的「子查询计算+外层聚合」两步操作,显式拆分为「子查询结果写入临时表→读取临时表做聚合」两个执行步骤。
但该方案并不适合你当前的场景:你的查询逻辑简单、数据量小,使用临时表反而会额外增加临时表的读写开销,性能不如上面给出的简化版无嵌套查询,仅在子查询结果集极大、需要多次复用该结果集的场景下,临时表方案才具备性价比。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 04:36:04