我有一个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+")))
出现错误,显示:
数据库错误,附近语法有误。
person(id,name unique)
和cat(person_id,name unique)
,我想插入许多(person_name,cat_name)
对。 - Aur SarafINSERT IGNORE
时,如果查询失败,您将失去洞察力,这可能意味着您正在默默地丢失数据。这不是数据库的设计目的。仅在您完全了解后果时使用:INSERT IGNORE
。如果可能,请改用ON CONFLICT DO NOTHING
(需要SQLite 3.24+),对于任何旧版本的SQLites,INSERT INTO ... SELECT ... WHERE NOT EXISTS(SELECT 1 ... FROM WHERE ...)
更安全...尽管相当繁琐。 - NeverEndingQueue