LEFT JOIN未返回预期结果求助:需保留左表全量数据并匹配指定行
问题解决:LEFT JOIN保留左表全部数据并过滤右表匹配项
你的问题核心是WHERE子句的过滤时机错误:LEFT JOIN后用WHERE过滤右表字段,会把左表中那些匹配到右表但不符合TradeableCode='MSFT'的行直接剔除,仅保留完全无匹配的左表行,最终导致左表数据不全。
正确的做法是把右表的过滤条件整合到ON子句中,在关联阶段就筛选右表符合要求的数据,确保左表所有行都被保留:
SELECT tblCalendar.dDate, tblCalendar.dDay, tblDailyData.TradeableDate, tblDailyData.TradeableCode FROM tblCalendar LEFT JOIN tblDailyData ON tblCalendar.[dDate] = tblDailyData.[TradeableDate] AND tblDailyData.TradeableCode = "MSFT" ORDER BY tblCalendar.dDate;
逻辑说明
ON子句:在JOIN关联时就筛选右表数据,仅将右表中日期匹配且Code为MSFT的行与左表关联,左表无匹配的行依然保留,对应右表字段显示NULL。- 原WHERE子句:JOIN完成后再过滤结果集,会把左表中匹配到右表但Code非MSFT的行(此时
TradeableCode不为NULL,不满足WHERE的任一条件)直接删除,造成左表数据丢失。
内容的提问来源于stack exchange,提问作者Keith Raymond
相关产品推荐
相关产品推荐

