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 "MERGE INTO" 是不是进行了插入或更新
Hibernate Update 在 HSQLDB 中转换删除/插入