• ベストアンサー

SQLiteでINSERT OR UPDATE

SQLiteにはREPLACE文がありますが、これを使うと、例えばn,c1,c2,c3フィールドがあるデータsampleに対して「replace into sample (n,c2) values (1,1)」を実行すると、c1とc3はnull値になってしまいます。 一部のSQLデータベースで用意されている「INSERT OR UPDATE」のように、行が存在すれば対象のフィールドのみを書き換え(それ以外のフィールドの内容は維持)、存在しなければ行を追加する構文を作ることは可能でしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.1

SQLiteでは、insert or replace しかないけど select文からの入力とサブクエリは使えるから replace into [table_name] (n,c1,c2,c3) select x.n, org.c1, x.c2, org.c3 from (select 1 as n, 1 as c2 ) as x left join [table_name] as org on x.n=org.n ; n がprimary key または uniqueの前提で1行書き換えまたは、新規挿入。

関連するQ&A