我正在尝试使用MERGE INTO来保存或更新HSQLDB表。我遇到了一个在NOT MATCHED时插入新记录的问题。
重现问题的步骤
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
语句可以更新现有记录。
任何人都知道插入时不匹配的问题是什么?除了“匹配时”和“什么时候没有匹配”以外,还有第三种情况吗?
感谢。
答案 0 :(得分:0)
问题在于此条款:
USING (select id from user where id=1) u2
如果表中没有记录,则USING子句不会生成任何行。因此,没有任何内容可以插入或更新现有行。
您需要重写它,以便USING子句生成包含数据的行。
例如:
USING (values(1)) u2(id)