次の 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')
テーブルにまだ存在しない場合にのみ、エントリを追加する必要があります。これを1つのステップで実行したいと思います(エントリがテーブルにあるかどうかを確認するSELECTステップと、そうでない場合はINSERTする2番目のステップの代わりに)
hsqldb には、このための MERGE 操作があります。ただし、問題は、hsqldb が自動的に値を設定する必要がある id IDENTITY 列があり、これを 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) を指定する必要があり、id を自動的に設定するのは hsqldb である必要があります (上記の 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