16

私はH2を使用しています。値が存在しない場合は、テーブルに値を挿入したいと思います。次のコマンドでテーブルを作成します。

CREATE TABLE IF NOT EXISTS $types 
  (type VARCHAR(15) NOT NULL UNIQUE);

そして、私は次のようなことをしたい

REPLACE INTO types (type) values ('type1');

MySQLで明らかに機能するReplaceに関するを見つけましたが、h2を使用しています。しかし、h2コンソールからこれを実行するとエラーが発生します。

Syntax error in SQL statement "REPLACE[*] INTO TYPES (TYPE) VALUES ('expense') "; expected "ROLLBACK, REVOKE, RUNSCRIPT, RELEASE, {"; SQL statement:
REPLACE INTO types (type) values ('expense') [42001-170] 42001/42001

私も試しました

INSERT IGNORE INTO types (type) values ('expense');

INSERT INTO types (type) values ('expense') ON DUPLICATE KEY UPDATE type=type;

新しい挿入が古いデータを上書きするのか、それとも単に新しい挿入を実行しないのかは関係ありません。h2データベースでこれを行う方法はありますか?

4

1 に答える 1

26

merge ステートメントを使用すると、目的を達成できるはずです。私は H2 の専門家ではありませんがMERGE、SQL Server でこのステートメントを数回使用しており、その Web サイトの外観からすると、うまくいくはずです。

ウェブサイトから:

既存の行を更新し、存在しない行を挿入します。キー列が指定されていない場合、主キー列を使用して行が検索されます。

于 2013-03-08T03:27:31.887 に答える