【问题标题】:HSQLDB merge into can neither insert nor updateHSQLDB 合并到既不能插入也不能更新
【发布时间】:2016-12-11 22:47:17
【问题描述】:

我正在尝试使用 MERGE INTO 来保存或更新 HSQLDB 表。我遇到了在不匹配时插入新记录的问题。

重现问题的步骤

  1. 创建表

CREATE TABLE user ( id INT, name VARCHAR(16), address VARCHAR(64) );

  1. 合并到

MERGE INTO user u1 USING (select id from user where id=1) u2
ON u1.id = u2.id
WHEN MATCHED THEN UPDATE SET u1.name='name', u1.address='address'
WHEN NOT MATCHED THEN INSERT (id, name, address) values(1, 'name', 'address')

如果没有 id:1 的记录,上面的语句没有任何内容,"Updated Rows: 0"。

如果插入一条记录

INSERT INTO user values(1, 'Y', 'B');

以上MERGE INTO语句可以更新已有记录。

有人知道 INSERT WHEN NOT MATCHED 有什么问题吗?除了“WHEN MATCHED”和“WHEN NOT MATCHED”还有第三种情况吗?

谢谢。

【问题讨论】:

    标签: merge hsqldb


    【解决方案1】:

    问题出在这个子句中:

    USING (select id from user  where id=1) u2
    

    当表中没有记录时,没有USING子句生成的行。所以没有什么可以插入或更新现有的行。

    您需要重写它,以便 USING 子句生成一行数据。

    例如:

    USING (values(1)) u2(id)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 2018-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-11
      • 1970-01-01
      相关资源
      最近更新 更多