隐式Join正常运行但显式Join无结果,请求技术协助
问题排查:显式JOIN无结果返回的原因
核心问题分析
你写的显式JOIN语句里,ON w1.id = w2.id这一条件完全错误:
- 每个
id对应唯一的一条记录,w1.id = w2.id意味着你在把每条记录和它自己做连接 - 同一条记录的
recorddate完全相同,Datediff(w1.recorddate,w2.recorddate)结果为0,永远满足不了=1的条件,所以最终没有任何数据返回
另外你提供的隐式JOIN语句里还有个笔误:需求是找温度高于前一天的记录,但你写的是w1.temprature = w2.Temprature,这会筛选出温度和前一天相等的记录,和需求不符。
纠正后的显式JOIN写法
把日期差的判断放在ON子句中(这才是显式JOIN的正确用法),同时修正温度条件:
Select w1.id from weather w1 inner join weather w2 on Datediff(w1.recorddate, w2.recorddate) = 1 where w1.temprature > w2.Temprature
补充说明
你之前的隐式JOIN写法(无ON子句的JOIN)本质是交叉连接(CROSS JOIN),会生成两张表所有行的笛卡尔积,再通过WHERE条件过滤结果。虽然能得到正确结果,但交叉连接性能极差,数据量大时会严重拖慢查询,更推荐用显式JOIN并在ON子句中指定连接条件。
内容的提问来源于stack exchange,提问作者Anubhav sharma
相关产品推荐
相关产品推荐

