1. ホーム
  2. sqlite

[解決済み】SQLiteの "Insert if not exists "ステートメントについて

2022-04-12 07:28:26

質問

SQLiteデータベースを持っています。私は値を挿入しようとしています ( users_id , lessoninfo_id ) のテーブルで bookmarks ただし、両者が同じ行に存在しない場合に限ります。

INSERT INTO bookmarks(users_id,lessoninfo_id) 
VALUES(
    (SELECT _id FROM Users WHERE User='"+$('#user_lesson').html()+"'),
        (SELECT _id FROM lessoninfo 
        WHERE Lesson="+lesson_no+" AND cast(starttime AS int)="+Math.floor(result_set.rows.item(markerCount-1).starttime)+") 
        WHERE NOT EXISTS (
            SELECT users_id,lessoninfo_id from bookmarks 
            WHERE users_id=(SELECT _id FROM Users 
            WHERE User='"+$('#user_lesson').html()+"') AND lessoninfo_id=(
                SELECT _id FROM lessoninfo
                WHERE Lesson="+lesson_no+")))

というエラーが出ます。

where 構文付近で db エラーが発生しました。

解決方法は?

memosというテーブルがあり、2つのカラムがあるとします。 idtext というようなことができるはずです。

INSERT INTO memos(id,text) 
SELECT 5, 'text to insert' 
WHERE NOT EXISTS(SELECT 1 FROM memos WHERE id = 5 AND text = 'text to insert');

レコードにすでに text が '挿入するテキスト' と等しく、かつ id が5である場合、挿入操作は無視されます。

この方法があなたの特定のクエリに有効かどうかは分かりませんが、おそらく進め方のヒントになるはずです。

で説明されているように、重複を許さないようにテーブルを設計することをお勧めします。 @CLs answer を以下に示します。