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

SnowSQL如何在日期范围连接中获取含不匹配记录的全部数据

问题:获取指定日期范围内Table_Two的所有记录(含Table_One中不存在的ID)

需求是在指定日期范围内,获取Table_Two(T2)的所有记录,包括那些Table_One(T1)中当日不存在的ID记录(每日T2中不在T1的ID会变化)。

原尝试的查询语句:

select t1.id
  , t1.date 
  , t1.col1
  , t2.col2
from table_one t1 
join table_two t2 on
  t1.id=t2.id
  and t1.date=t2.date
where date>='2022-11-01' and date<='2022-11-03'
group by t1.id
  , t1.date
union
select t1.id
  , t1.date 
  , t1.col1
  , t2.col2
from table_one t1 
join table_two t2 on
  t1.id=t2.id
  and t1.date=t2.date
where date>='2022-11-01' and date<='2022-11-03'
  t1.id=NULL
group by t1.id
  , t1.date

但第二个查询未返回任何记录。


示例输入与输出

T1表

iddatecol_1
12022-11-011
22022-11-012
12022-11-023
32022-11-034

T2表

iddatecol_2
12022-11-015
22022-11-016
32022-11-017
12022-11-028
22022-11-029
12022-11-0310
22022-11-0311
32022-11-0312

原查询结果

iddatecol_1col_2
12022-11-0115
22022-11-0126
12022-11-0238
32022-11-03412

需要补充的记录

iddatecol_1col_2
32022-11-01NULL7
22022-11-02NULL9
12022-11-03NULL10
22022-11-03NULL11

期望的完整输出(按日期排序)

iddatecol_1col_2
12022-11-0115
22022-11-0126
32022-11-01NULL7
12022-11-0238
22022-11-02NULL9
12022-11-03NULL10
22022-11-03NULL11
32022-11-03412

问题原因与解决方案

原查询错误点

  1. 第二个查询使用内连接(JOIN),内连接仅返回两表匹配的记录,无法获取T2中T1不存在的记录;
  2. 判断NULL值不能用=,必须用IS NULL,但即使修改条件,内连接也无法满足需求;
  3. 多余的GROUP BY语句对NULL ID的分组处理会导致结果异常。

正确查询语句

要获取T2的所有记录并关联T1的匹配数据,应使用左连接(LEFT JOIN),以T2为主表,关联T1的对应记录:

SELECT 
    t2.id,
    t2.date,
    t1.col_1,
    t2.col_2
FROM table_two t2
LEFT JOIN table_one t1 
    ON t1.id = t2.id 
    AND t1.date = t2.date
WHERE t2.date BETWEEN '2022-11-01' AND '2022-11-03'
ORDER BY t2.date, t2.id;

该查询会返回T2在指定日期内的所有记录,T1中无对应id+date的记录,col_1将显示为NULL,完全符合期望输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 02:21:00