【发布时间】:2015-10-03 02:32:22
【问题描述】:
尝试这样做:
UPDATE table1 t1
SET cost = t2.price
FROM table2 t2
WHERE t1.item_id = t2.item_id
它适用于 PostgreSQL,但不适用于 HSQLDB。
如何修复此脚本以支持同时在 PostgreSQL 和 HSQLDB 上工作?
【问题讨论】:
标签: sql postgresql join hsqldb
尝试这样做:
UPDATE table1 t1
SET cost = t2.price
FROM table2 t2
WHERE t1.item_id = t2.item_id
它适用于 PostgreSQL,但不适用于 HSQLDB。
如何修复此脚本以支持同时在 PostgreSQL 和 HSQLDB 上工作?
【问题讨论】:
标签: sql postgresql join hsqldb
UPDATE ... FROM 语法是非标准的。这是标准 SQL,适用于 HSQLDB(显然也适用于 PostgreSQL)。我真的很惊讶 PostgreSQL 9.4 语法文档没有提到自 1992 年以来一直在标准中的这种语法。
UPDATE table1 t1
SET cost = (SELCT t2.price
FROM table2 t2
WHERE t1.item_id = t2.item_id)
【讨论】:
set (a,b) = (select x, y ...)。支持使用标量子选择的单个列更新是:sqlfiddle.com/#!15/d7929/1
HSQLDB 不支持UPDATE ... FROM 语句。在 HSQLDB 上使用 MERGE statement 代替。出乎我的意料,希望这不包含语法错误:
MERGE INTO table1 USING table2 ON table1.item_id = table2.item_id
WHEN MATCHED THEN UPDATE SET table1.cost = table2.price
不幸的是,截至今天 postgres 似乎不支持MERGE statement,而只支持类似的UPSERT。
【讨论】: