SQLite中的“插入如果不存在”语句

我有一个SQLite数据库。 我试图插入值( users_idlessoninfo_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+")))

这给出了一个错误:

db语法附近的错误。


如果你有一张名为备忘录的表,它有两列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下面的@CLs answer所解释的。


如果你永远不想重复,你应该声明这是一个表约束:

CREATE TABLE bookmarks(
    users_id INTEGER,
    lessoninfo_id INTEGER,
    UNIQUE(users_id, lessoninfo_id)
);

(两列上的主键都具有相同的效果。)

然后可以告诉数据库你想默默地忽略违反这种约束的记录:

INSERT OR IGNORE INTO bookmarks(users_id, lessoninfo_id) VALUES(123, 456)

对于独特的列使用这个:

INSERT OR REPLACE INTO table()values();

更多:sqlite.org/lang_insert

链接地址: http://www.djcxy.com/p/19769.html

上一篇: "Insert if not exists" statement in SQLite

下一篇: Can I concatenate multiple MySQL rows into one field?