Snowflake中UPDATE语句WHERE条件失效导致全表更新问题
问题根因
你写的SQL违反了Snowflake UPDATE的语法规则:UPDATE后的目标表不能在FROM子句中重复引入。
你在FROM里又写了一次table1和table2做JOIN,这时候SQL解析器会把FROM里的table1当成独立的关联表,和你要更新的目标table1是两个独立的引用:
- WHERE里的
table1.source='abc'只会筛选FROM里JOIN出来的临时结果集,不会限制要更新的目标表行 - 目标table1和FROM里的JOIN结果没有做行级绑定,最终导致目标表所有行都被意外更新。
修正后的SQL
直接把关联表table2写在FROM里,不要重复引用目标table1,同时把ID匹配条件、source筛选条件都写在WHERE子句中即可:
UPDATE table1 SET col1 = table2.col2 FROM table2 WHERE table1.ID = table2.ID AND table1.source = 'abc';
补充提醒:如果table2中存在多个相同ID的行,Snowflake会随机选择其中一行的col2值更新到table1中。如果需要固定取值逻辑,可以先对table2做聚合去重(比如按ID分组取最大/最新的col2值),再做关联更新,避免结果不符合预期。
内容的提问来源于stack exchange,提问作者Ahteram Chouhan
相关产品推荐
相关产品推荐

