【问题标题】:HSQLDB update field of one table from field of another oneHSQLDB 从另一个表的字段更新一个表的字段
【发布时间】: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


    【解决方案1】:

    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)
    

    【讨论】:

    • Postgres 确实 支持该语法。虽然加入通常更快
    • 好,但它不在语法文档postgresql.org/docs/9.4/interactive/sql-update.html 中,并且页面末尾的兼容性部分有一个未实现的示例。
    • 未实现多列更新set (a,b) = (select x, y ...)。支持使用标量子选择的单个列更新sqlfiddle.com/#!15/d7929/1
    • 他们应该记录下来。编辑了答案。
    • 那不起作用。 UPDATE table1 SET cost = (SELECT price FROM table2 WHERE table1.item_id = table2.item_id) 有效
    【解决方案2】:

    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。

    【讨论】:

      猜你喜欢
      • 2011-02-15
      • 2014-03-06
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 1970-01-01
      相关资源
      最近更新 更多