Snowflake执行Update语句报‘Unsupported subquery type’错误的解决方法
修复Snowflake中UPDATE子查询报错的方案
错误原因
Snowflake不支持在SET子句中使用这种关联标量子查询的写法,从而触发Unsupported subquery type cannot be evaluated错误。
修复后的SQL(推荐写法)
使用Snowflake原生支持的UPDATE...FROM语法,通过表关联完成赋值:
UPDATE upd_tbl a1 SET last_update_date = SYSDATE(), rno = b1.rno FROM sid b1 WHERE a1.rowid_object = b1.rowid_object;
语法说明
- 通过
FROM子句直接关联upd_tbl和sid表,规避了子查询的类型限制 WHERE条件确保仅更新在sid表中存在匹配rowid_object的行,与原语句WHERE rowid_object IN (...)逻辑完全一致- 这种写法的执行效率远高于子查询方式
特殊情况处理
如果sid表中同一个rowid_object对应多行数据,直接关联会因匹配到多行报错,此时可以用聚合函数确保返回单值:
UPDATE upd_tbl a1 SET last_update_date = SYSDATE(), rno = (SELECT MAX(rno) FROM sid b1 WHERE a1.rowid_object = b1.rowid_object) WHERE EXISTS (SELECT 1 FROM sid b1 WHERE a1.rowid_object = b1.rowid_object);
内容的提问来源于stack exchange,提问作者Sherin Shaziya
相关产品推荐
相关产品推荐

