PostgreSQL更新库存MERGE查询报错:syntax error at or near "MERGE"
问题原因及解决方法
报错原因
你的报错是因为使用的PostgreSQL版本低于11——PostgreSQL直到11版本才正式支持MERGE语法,低版本数据库无法识别这个关键字,因此抛出语法错误。
修复方案
方案1:升级PostgreSQL版本(推荐,若允许)
如果能将数据库升级到11及以上版本,你原本写的MERGE语句语法是正确的,可以直接执行。执行前注意确认两张表的product_id字段类型一致,避免因类型不匹配导致的隐式转换问题。
方案2:使用低版本支持的UPDATE JOIN语法
如果无法升级版本,用PostgreSQL原生支持的UPDATE ... FROM语法实现相同的更新逻辑:
UPDATE main_table MT SET product_stock = UT.product_stock FROM update_table UT WHERE MT.product_id = UT.product_id;
这条语句会匹配两张表中product_id相同的记录,将main_table的product_stock更新为update_table中的对应值,和你原本MERGE语句的WHEN MATCHED分支效果完全一致。
内容的提问来源于stack exchange,提问作者Selman
相关产品推荐
相关产品推荐

