1. ホーム

[解決済み】INSERT IF NOT EXISTS ELSE UPDATE?

2022-03-28 01:38:11

質問

新しいレコードを挿入したり、既に存在するレコードを更新したりするにはどうすればよいのでしょうか?

私は以下のように定義されたテーブルを持っています。

CREATE TABLE Book 
ID     INTEGER PRIMARY KEY AUTOINCREMENT,
Name   VARCHAR(60) UNIQUE,
TypeID INTEGER,
Level  INTEGER,
Seen   INTEGER

私がしたいことは、ユニークな名前を持つレコードを追加することです。その名前がすでに存在する場合は、フィールドを変更したいのです。

誰かこの方法を教えてください。

どのように解決するのですか?

をご覧ください。 http://sqlite.org/lang_conflict.html .

のようなものが欲しいですよね。

insert or replace into Book (ID, Name, TypeID, Level, Seen) values
((select ID from Book where Name = "SearchName"), "SearchName", ...);

挿入リストにないフィールドは、その行がすでにテーブルに存在する場合、NULLに設定されることに注意してください。このため、サブセレクトで ID カラムがあります。置換の場合、文はそれをNULLに設定し、新しいIDが割り当てられる。

この方法は、置換の場合は特定のフィールドの値をそのままにしておき、挿入の場合はそのフィールドをNULLに設定したい場合にも使用できます。

例えば Seen を単独で使用します。

insert or replace into Book (ID, Name, TypeID, Level, Seen) values (
   (select ID from Book where Name = "SearchName"),
   "SearchName",
    5,
    6,
    (select Seen from Book where Name = "SearchName"));