Search code examples
sqliteconstraintssql-insert

"Insert if not exists" statement in SQLite


I have an SQLite database. I am trying to insert values (users_id, lessoninfo_id) in table bookmarks, only if both do not exist before in a row.

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+")))

This gives an error saying:

db error near where syntax.


Solution

  • If you have a table called memos that has two columns id and text you should be able to do like this:

    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');
    

    If a record already contains a row where text is equal to 'text to insert' and id is equal to 5, then the insert operation will be ignored.

    I don't know if this will work for your particular query, but perhaps it give you a hint on how to proceed.

    I would advice that you instead design your table so that no duplicates are allowed as explained in @CLs answer below.