HSQLDB 合并到既不能插入也不能更新

Posted

技术标签:

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

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

重现问题的步骤

    创建表

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

    合并到

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”还有第三种情况吗?

谢谢。

【问题讨论】:

【参考方案1】:

问题出在这个子句中:

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

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

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

例如:

USING (values(1)) u2(id)

【讨论】:

以上是关于HSQLDB 合并到既不能插入也不能更新的主要内容,如果未能解决你的问题,请参考以下文章

HSQLDB 如果不存在则插入,如果存在则更新

如何知道 Hsqldb "MERGE INTO" 是不是进行了插入或更新

Hibernate Update 在 HSQLDB 中转换删除/插入

HSQLDB QUERY 正确性

使用 if exists 使用合并 oracle sql 逻辑插入或更新

HSQLDB如何手动插入记录