我有一个 SQLite 数据库。我正在尝试在 table中插入值 ( users_id, ),前提是两者之前都不存在。lessoninfo_id``bookmarks
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 的表,它有两列id,text你应该可以这样做:
id
text
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等于 ‘text to insert’ 并且id等于 5 的行,那么插入操作将被忽略。
我不知道这是否适用于您的特定查询,但也许它会提示您如何继续。
我建议您改为设计您的表格,以便不允许重复,如下所述: 如果您不想重复,则应将其声明为表约束:
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)