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

时间:2016-12-11 22:47:18

标签: merge hsqldb

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

重现问题的步骤

  1. 创建表格
  2. CREATE TABLE user ( id INT, name VARCHAR(16), address VARCHAR(64) );

    1. MERGE INTO
    2. 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语句可以更新现有记录。

      任何人都知道插入时不匹配的问题是什么?除了“匹配时”和“什么时候没有匹配”以外,还有第三种情况吗?

      感谢。

1 个答案:

答案 0 :(得分:0)

问题在于此条款:

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

如果表中没有记录,则USING子句不会生成任何行。因此,没有任何内容可以插入或更新现有行。

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

例如:

USING (values(1)) u2(id)