微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

比较 Snowflake 上包含 NULL 值的两个表

如何解决比较 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;

db<>fiddle demo

,

还有一个选择:

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 举报,一经查实,本站将立刻删除。