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

问题描述 投票:0回答:2

带有架构的表 T1

身份证 类型 型号_ID 频率
1 汽车 234 5
2 SUV 12 6
3 电动车
4 高压

带有模式和数据的表 T2

身份证 类型 型号_ID 频率
3 电动车
4 高压

现在我正在检查以下查询的工作情况,

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不是标识符,所以应该与表中的每一列进行比较。

snowflake-cloud-data-platform querying
2个回答
3
投票

您可以使用 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<>小提琴演示


1
投票

还有一个选择:

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);
© www.soinside.com 2019 - 2024. All rights reserved.