我有以下 hsqldb 数据库:
CREATE TABLE t (id INT IDENTITY, code VARCHAR(10), description VARCHAR(100))
INSERT INTO t (code, description) VALUES ('C1', 'dining table'), ('C2', 'deck chair')
我需要添加条目,前提是它们不存在于表中。我想一步完成(而不是 SELECT 步骤来确定条目是否在表中,如果不是这种情况,则第二步插入它)
hsqldb 对此有 MERGE 操作。但是,问题是我有一个 id IDENTITY 列,hsqldb 应该自动处理设置值,我不知道如何告诉 MERGE 操作。
MERGE INTO t USING (VALUES(3, 'C3', 'conference table'))
AS vals(x,y,z) ON t.code = vals.y
WHEN NOT MATCHED THEN INSERT VALUES vals.x, vals.y, vals.z
这可行,但我必须提供 id (3),并且我需要 hsqldb 自动设置 id(就像上面的 INSERT 操作一样)。我需要这样的东西:
MERGE INTO t (code, description) USING (VALUES('C3', 'conference table'))
AS vals(x,y) ON t.code = vals.x
WHEN NOT MATCHED THEN INSERT VALUES vals.x, vals.y
但此查询不起作用,因为 MERGE 操作不允许指定我正在处理的列“(代码,描述)”。
我怎样才能实现它?
ps: http: //hsqldb.org/doc/2.0/guide/dataaccess-chapt.html#dac_merge_statement