如何解决比较 Snowflake 上包含 NULL 值的两个表
大家好,我遇到了一个问题,即 带架构的表 T1
ID | TYPE | MODEL_ID | FREQ |
---|---|---|---|
1 | 汽车 | 234 | 5 |
2 | SUV | 12 | 6 |
3 | EV | NULL | NULL |
4 | HV | NULL | NULL |
带有架构和数据的表 T2
ID | TYPE | MODEL_ID | FREQ |
---|---|---|---|
3 | EV | NULL | NULL |
4 | HV | NULL | NULL |
现在我正在检查以下查询的工作,
SELECT * FROM T1 AS T,T2 AS N
WHERE T.ID = N.ID AND T.TYPE = N.TYPE AND T.MODEL_ID = N.MODEL_ID AND T.FREQ = N.FREQ
结果是空集,我知道我需要实现一个空安全查询,但在这种情况下我如何实现它。
注意:这里的 ID 不是标识符,所以应该与表中的每一列进行比较。
解决方法
您可以使用 IS NOT DISTINCT FROM 来执行 NULL 安全比较:
比较两个表达式是否相等(或不相等)。该函数是 NULL 安全的,这意味着它将 NULL 视为用于比较相等性的已知值。
SELECT *
FROM T1 AS T,T2 AS N
WHERE T.ID IS NOT DISTINCT FROM N.ID
AND T.TYPE IS NOT DISTINCT FROM N.TYPE
AND T.MODEL_ID IS NOT DISTINCT FROM N.MODEL_ID
AND T.FREQ IS NOT DISTINCT FROM N.FREQ;
另一个更简单的选择是使用 INTERSECT 集合运算符:
SELECT * FROM t1
INTERSECT
SELECT * FROM T2;
,
还有一个选择:
SELECT *
FROM T1 AS T,T2 AS N
WHERE EQUAL_NULL(T.ID,N.ID)
AND EQUAL_NULL(T.TYPE,N.TYPE)
AND EQUAL_NULL(T.MODEL_ID,N.MODEL_ID)
AND EQUAL_NULL(T.FREQ,N.FREQ);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。