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表
| id | date | col_1 |
|---|---|---|
| 1 | 2022-11-01 | 1 |
| 2 | 2022-11-01 | 2 |
| 1 | 2022-11-02 | 3 |
| 3 | 2022-11-03 | 4 |
T2表
| id | date | col_2 |
|---|---|---|
| 1 | 2022-11-01 | 5 |
| 2 | 2022-11-01 | 6 |
| 3 | 2022-11-01 | 7 |
| 1 | 2022-11-02 | 8 |
| 2 | 2022-11-02 | 9 |
| 1 | 2022-11-03 | 10 |
| 2 | 2022-11-03 | 11 |
| 3 | 2022-11-03 | 12 |
原查询结果
| id | date | col_1 | col_2 |
|---|---|---|---|
| 1 | 2022-11-01 | 1 | 5 |
| 2 | 2022-11-01 | 2 | 6 |
| 1 | 2022-11-02 | 3 | 8 |
| 3 | 2022-11-03 | 4 | 12 |
需要补充的记录
| id | date | col_1 | col_2 |
|---|---|---|---|
| 3 | 2022-11-01 | NULL | 7 |
| 2 | 2022-11-02 | NULL | 9 |
| 1 | 2022-11-03 | NULL | 10 |
| 2 | 2022-11-03 | NULL | 11 |
期望的完整输出(按日期排序)
| id | date | col_1 | col_2 |
|---|---|---|---|
| 1 | 2022-11-01 | 1 | 5 |
| 2 | 2022-11-01 | 2 | 6 |
| 3 | 2022-11-01 | NULL | 7 |
| 1 | 2022-11-02 | 3 | 8 |
| 2 | 2022-11-02 | NULL | 9 |
| 1 | 2022-11-03 | NULL | 10 |
| 2 | 2022-11-03 | NULL | 11 |
| 3 | 2022-11-03 | 4 | 12 |
问题原因与解决方案
原查询错误点
- 第二个查询使用内连接(JOIN),内连接仅返回两表匹配的记录,无法获取T2中T1不存在的记录;
- 判断NULL值不能用
=,必须用IS NULL,但即使修改条件,内连接也无法满足需求; - 多余的
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
相关产品推荐
相关产品推荐

