我有两个表,main_tableproduct_idproduct_stockproduct_name列.

update_tableproduct_id,product_stock列.

我想把product_stock换成main_table.

我写了这样一个查询:

MERGE INTO main_table MT
USING update_table UT
ON MT.product_id = UT.product_id
WHEN MATCHED THEN
  UPDATE SET MT.product_stock = UT.product_stock ; 

但此查询返回错误

ERROR:  syntax error at or near "MERGE"

为什么我的查询不起作用?我如何才能使其起作用?

推荐答案

正如其他人所指出的那样,Postgres(目前)还没有merge声明.然而,您并不需要它.您的语句将从update_tableexist in main_table更新product_idmain_table,但是,如果UPDATE_TABLE中的product_id不存在于Main_TABLE中,该语句将跳过更新并继续.这是因为试图更新不存在的行is not an error.波斯格雷斯对update ... from ...也做了同样的事情,所以:(见demo)

update main_table mt  
   set product_stock = ut.product_stock
  from update_table ut
 where ut.product_id = mt.product_id;

缺点是您不会收到没有发生的更新的通知.但Merge也没有发出通知.

Sql相关问答推荐

查询多个表并返回合并在联合列上的所有表中的所有行

获取每5分钟时间间隔的总和

如何退回当年的所有参赛作品?""

分组多输出访问查询问题

基于唯一值在Access查询中创建计数器

SQL:如何取上一年的平均值?

使用SQL创建列出两个时间戳之间小时数的列

过go 四周未填充的数据,即W50,51,52-SQL

对于多字节字符,SQL Server中的DATALENGTH返回1字节

更正用于判断错误组合的SQL

SQL Server 查询 WHERE LIKE

在 SQL Server 中合并两个 XML 列

Postgresql - 如何根据阈值计算累积和

删除每个不同日期中未 Select 的最短最长时间

按公司和产品查询最近发票的平均价格的SQL查询

为 sqlite 全文搜索 (fts) 创建触发器时出现虚拟表的不安全使用

如何获得上个月和下个月之间的销售额差异

为数组中的每个元素从表中收集最大整数

SQL日期比较用例;月初至今的报告

如何使用 pg-promise 创建要在复杂的 sql 查询中使用的 VALUES 列表?