我想看看在雪花中编写 SQL 的最有效方法是什么。以下是问题陈述。
理想情况下,如果映射表 B 中所有映射值都可用,则只需在表 A 和表 B 之间进行左连接就足够了,如下所示
with cte1 as ( Select X, T from TABLE A
LEFT JOIN TABLE B on A.X = B.X1);
但在某些情况下,映射表 B 还没有新的 X 列映射,因此我需要对表 A 的不同列 X 应用 API 调用,该列 X 在映射表 B 中没有映射值,因此可以进行最少的 API 调用.
missing_values_table as (Select function1(distinct X) from cte1 where T is NULL);
在上述步骤之后,将结果与 MAPPING TABLE B 合并以使用新记录进行更新,最后再次在 TABLE A 和 Table B 之间进行 LEFT JOIN 以获取输出表。
表A
X 列 |
---|
ab |
zx |
ab |
cb |
抄送 |
抄送 |
表B
X1 列 | T 栏 |
---|---|
ab | 汤姆 |
zx | 银行 |
输出表:
X 列 | T 栏 |
---|---|
ab | 汤姆 |
zx | 银行 |
ab | 汤姆 |
CB | 银 |
抄送 | 黄金 |
抄送 | 黄金 |
表B
X1 列 | T 栏 |
---|---|
ab | 汤姆 |
zx | 银行 |
cb | 银 |
抄送 | 黄金 |
我尝试了上述方法,不确定这是否有效。请告诉我是否有更好的方法,以便我可以避免两个 LEFT JOINS,似乎重复
为什么不使用 SQL Set Difference 操作来获取
Table A.x
和 Table B.x1
之间的差异
在MySQL中查询:
select distinct A.x from A
where A.x NOT IN (Select distinct B.x1 from B)
结果:db<>小提琴