レコードが存在しない場合の SQLite への挿入: IF NOT EXISTS の探索
MS SQL Server では、IF NOT EXISTS 句は次のとおりです。条件付きでテーブルにレコードを挿入するために使用されます。たとえば、次のコード スニペットは、EVENTTYPE テーブルに新しいレコードが存在しない場合にそのレコードを作成します:
IF NOT EXISTS(SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received') INSERT INTO EVENTTYPE (EventTypeName) VALUES ('ANI Received');
ただし、SQLite は IF NOT EXISTS 句をネイティブにサポートしません。その結果、この機能を SQLite に移植しようとする開発者は、課題に直面する可能性があります。
SQLite の条件付き挿入の回避策
IF NOT EXISTS の直接サポートがないにもかかわらず、 SQLite で利用できるいくつかの回避策があります。一般的なアプローチの 1 つは、INSERT OR IGNORE ステートメントを使用することです。
INSERT OR IGNORE INTO EVENTTYPE (EventTypeName) VALUES 'ANI Received'
このステートメントは、EVENTTYPE テーブルにレコードを挿入しようとしますが、レコードがすでに存在する場合でもエラーは発生しません。
または、次に示すように、SELECT ステートメントと INSERT ステートメントを組み合わせて使用することもできます。以下:
INSERT INTO EVENTTYPE (EventTypeName) SELECT 'ANI Received' WHERE NOT EXISTS (SELECT 1 FROM EVENTTYPE WHERE EventTypeName = 'ANI Received');
このコードは、まず SELECT ステートメントを使用してレコードが既に存在するかどうかを確認します。存在しない場合は、INSERT ステートメントが実行されて新しいレコードが追加されます。
以上がSQLite で条件付き挿入のために SQL Server の IF NOT EXISTS をシミュレートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。