SQL嵌套JOIN查询对比两周Member_Impact变化返回结果过多求助
问题根因
你的查询返回结果远超预期的核心问题是INNER JOIN的关联条件缺少了Issue_Id相等的判断,仅保留了Member_Impact不等的规则,这会导致两个子查询的结果集生成笛卡尔积:只要属于不同周的任意两条记录Member_Impact不一致就会匹配成功,而不是你预期的「仅对比同一个Issue_Id的两周数据」。
另外子查询内部的ORDER BY没有实际作用,还会额外浪费计算性能,可以直接删除。
修正后代码
SELECT currentweek.issue_id, Priorweek.Member_Impact AS prior_week_impact, Currentweek.Member_Impact AS current_week_impact FROM ( SELECT Rmd.Issue_Id, Current.As_Of_Date, Current.Member_Impact FROM Lod.Ism_Issue_Summary_Hist_Wky Current INNER JOIN Lod.Rmd_Iss_Remed_Summary Rmd ON Current.Issue_Id = Rmd.Issue_Id WHERE As_Of_Date = '2021-08-08' ) AS Priorweek INNER JOIN ( SELECT Rmd.Issue_Id, Current.As_Of_Date, Current.Member_Impact FROM Lod.Ism_Issue_Summary_Hist_Wky Current INNER JOIN Lod.Rmd_Iss_Remed_Summary Rmd ON Current.Issue_Id = Rmd.Issue_Id WHERE As_Of_Date = '2021-08-15' ) AS Currentweek -- 先关联同一Issue_Id的两周数据,再筛选值发生变化的记录 ON Priorweek.Issue_Id = Currentweek.Issue_Id AND Priorweek.Member_Impact <> Currentweek.Member_Impact;
如果需要覆盖「某一周存在、另一周不存在该Issue_Id」的场景,可以将INNER JOIN替换为FULL OUTER JOIN,同时添加空值判断逻辑即可。
内容的提问来源于stack exchange,提问作者JC411911
相关产品推荐
相关产品推荐

