H2 SQL データベース - レコードが存在しない場合は INSERT 質問する

H2 SQL データベース - レコードが存在しない場合は INSERT 質問する

H2 データベースを初期化したいのですが、レコードが存在するかどうかわかりません。レコードが存在する場合は何もしたくありませんが、存在しない場合はデフォルト値を書き込みたいです。

このようなもの:

IF 'number of rows in ACCESSLEVELS' = 0
INSERT INTO ACCESSLEVELS VALUES
    (0, 'admin'),
    (1, 'SEO'),
    (2, 'sales director'),
    (3, 'manager'),
    (4, 'REP')
    ;

ベストアンサー1

MERGE INTO ACCESSLEVELS 
  KEY(ID) 
VALUES (0, 'admin'),
  (1, 'SEO'),
  (2, 'sales director'),
  (3, 'manager'),
  (4, 'REP');

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

列に名前を付けない場合、その値はテーブルで定義されているとおりに指定する必要があります。テーブル定義内の順序から独立して列に名前を付けたい場合、または必要がない場合や不可能な場合にすべての列に値を指定する手間を省きたい場合は、次のようにします。

MERGE INTO ACCESSLEVELS 
  (ID, LEVELNAME)
  KEY(ID) 
VALUES (0, 'admin'),
  (1, 'SEO'),
  (2, 'sales director'),
  (3, 'manager'),
  (4, 'REP');

KEY 句だけでなく、列リストにもキー列 (この例では「ID」) を含める必要があることに注意してください。

おすすめ記事