HSQLDB合并成既不能插入也不能更新
HSQLDB merge into can neither insert nor update
我正在尝试使用 MERGE INTO 来保存或更新 HSQLDB table。我 运行 遇到不匹配时插入新记录的问题。
重现问题的步骤
- 创建table
CREATE TABLE user (
id INT,
name VARCHAR(16),
address VARCHAR(64)
);
- 合并到
合并到用户 u1
USING (select 来自 id=1 的用户的 id) u2<br>
ON u1.id = u2.id<br>
当匹配时
更新集 u1.name='name', u1.address='address'<br>
当不匹配时
INSERT (id, name, address) 值(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"还有第三种情况吗?
谢谢。
问题出在这个子句中:
USING (select id from user where id=1) u2
当table中没有记录时,USING子句没有生成行。所以没有什么可以插入或更新现有的行。
您需要重写它,以便 USING 子句生成包含数据的行。
例如:
USING (values(1)) u2(id)
我正在尝试使用 MERGE INTO 来保存或更新 HSQLDB table。我 运行 遇到不匹配时插入新记录的问题。
重现问题的步骤
- 创建table
CREATE TABLE user (
id INT,
name VARCHAR(16),
address VARCHAR(64)
);
- 合并到
合并到用户 u1
USING (select 来自 id=1 的用户的 id) u2<br>
ON u1.id = u2.id<br>
当匹配时
更新集 u1.name='name', u1.address='address'<br>
当不匹配时
INSERT (id, name, address) 值(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"还有第三种情况吗?
谢谢。
问题出在这个子句中:
USING (select id from user where id=1) u2
当table中没有记录时,USING子句没有生成行。所以没有什么可以插入或更新现有的行。
您需要重写它,以便 USING 子句生成包含数据的行。
例如:
USING (values(1)) u2(id)