如何在Snowflake的SQL SELECT中实现IF...THEN逻辑,table2为空时取table1数据
Snowflake 实现优先取table2、无结果则取table1的方案
纯SELECT语句实现(通用场景,无需脚本上下文)
你可以直接用UNION ALL配合存在性判断实现需求,单条SQL即可完成逻辑:
SELECT * FROM table2 UNION ALL SELECT * FROM table1 WHERE NOT EXISTS (SELECT 1 FROM table2)
逻辑说明
- 若table2有数据:
NOT EXISTS判断结果为假,第二个查询不会返回任何数据,最终结果就是table2的全量数据 - 若table2为空:
NOT EXISTS判断结果为真,最终返回table1的全量数据 - 该写法要求两张表的字段顺序、字段类型完全一致,符合你提到的schema完全相同的前提,
UNION ALL不需要做去重,性能表现最优。
脚本逻辑实现(和原有IF/THEN逻辑完全对齐)
如果你可以使用Snowflake Scripting的执行上下文(比如存储过程、Snowflake工作表脚本模式),也可以直接用和你示例逻辑一致的写法:
BEGIN IF (EXISTS(SELECT 1 FROM table2)) THEN SELECT * FROM table2; ELSE SELECT * FROM table1; END IF; END;
内容的提问来源于stack exchange,提问作者Juned Ansari
相关产品推荐
相关产品推荐

