次のように私はH2 DBに私のテーブルスキーマを持っている:テスト(nullでないIDのBIGINT、名前のVARCHAR(255)、主キー(id)を)が存在しない場合は同じテーブルから選択して挿入しない場合はどうすればいいですか?
は、テーブルを作成します。
alter tableテストが存在しない場合は制約を追加しますTest_NAME UNIQUE(name);
テーブルから最新のid値を選択して1つずつインクリメントしてテーブルに存在しない場合、name属性の値を 'Default'として挿入します。
例: name = Defaultのエントリがすでに存在する場合は挿入しないでください。
ID |名前
1 |デフォルト
name = Defaultのエントリが存在しない場合は、挿入します。
ID |名前
1 | ABC
2 | XYZ
idカラムの場合は、最大IDを見つけて1ずつ増やします。この場合、id = 3およびname = Defaultを挿入します。
次のように私のクエリは次のとおりです。
INSERT INTOテスト(ID、名前) SELECT MAX(ID)+ 1、EXISTS、NOTテスト (から 'デフォルト' は名前=」テスト* FROMを選択デフォルト');
しかし、それは私にエラーメッセージを表示します。 カラム "ID"にはNULLを使用できません。 SQLステートメント は、内部selectステートメントのwhere条件を適用するので、
私も試しました: MERGE INTOテストKEY(name)VALUES(SELECTからMAX、(ID)+ 1を選択、 'Default');
これは、mergeが新しい値で更新しようとするため、エラーが発生します。 'Default'が見つかると、主キー違反の原因となる新しいIDで行を更新します。
これを行うより良い方法はありますか?クエリを機能させるにはどうすればよいですか?
ありがとうございました。