Snowflake执行多表DELETE报错,求正确的多表删除实现方法
Snowflake多表DELETE报错原因及解决方法
错误核心原因
Snowflake 不支持MySQL风格的多表DELETE语法,它的DELETE语句一次只能针对单张表操作,你在DELETE后同时指定两张表的写法不符合Snowflake的语法规范,这就是报错SQL compilation error: syntax error line 1 at position 0 unexpected 'DELETE'的直接原因。
另外你的原语句还有一个问题:JOIN条件TO_DATE(UPDATE_DATE) = TO_DATE(UPDATE_DATE)没有指定表别名,会导致字段歧义,Snowflake无法判断该字段属于哪张表。
正确解决方案
要删除两张表中符合条件的行,需要分两次执行独立的DELETE语句,分别操作每张表:
- 删除
worker_table中符合条件的行:
DELETE FROM worker_table WHERE TO_DATE(DW_UPDATE_DATE) = '2023-07-12';
- 删除
worker_history_table中关联的行(如果需要和worker_table关联过滤):
DELETE FROM worker_history_table t2 WHERE EXISTS ( SELECT 1 FROM worker_table t1 WHERE TO_DATE(t1.UPDATE_DATE) = TO_DATE(t2.UPDATE_DATE) AND TO_DATE(t1.DW_UPDATE_DATE) = '2023-07-12' );
如果worker_history_table本身有DW_UPDATE_DATE字段,也可以直接过滤删除:
DELETE FROM worker_history_table WHERE TO_DATE(DW_UPDATE_DATE) = '2023-07-12';
补充说明
Snowflake的DML语句遵循ANSI SQL标准,和MySQL的扩展语法存在差异,不要默认沿用MySQL的写法,建议参考Snowflake官方的DELETE语法说明。
内容的提问来源于stack exchange,提问作者punsoca
相关产品推荐
相关产品推荐

