我有一个SQLite数据库。我试图在表bookmarks
中插入值(users_id
,lessoninfo_id
),只有当这两个值在一行中不存在时。
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 error near where syntax.
5条答案
按热度按时间xmq68pz91#
如果你永远不想有重复的,你应该把它声明为一个表约束:
字符串
(两列上的主键具有相同的效果。
然后可以告诉数据库您想要silently ignore records that would violate such a constraint:
型
xzv2uavs2#
如果你有一个名为memos的表,它有两列
id
和text
,你应该可以这样做:字符串
如果一条记录已经包含一行,其中
text
等于“text to insert”,id
等于5,则插入操作将被忽略。我不知道这是否适用于您的特定查询,但也许它会给予您一个如何继续的提示。
我建议你设计你的表,这样就不允许重复,就像下面的
@CLs answer
解释的那样。fae0ux8s3#
对于唯一列,请使用以下命令:
字符串
有关更多信息,请参见:sqlite.org/lang_insert
oxiaedzo4#
字符串
这是最快的路。
对于其他一些SQL引擎,你可以使用一个包含1条记录的Dummy表。例如:
型
uyhoqukh5#
对我来说,这适用于非唯一列(这里是“Name”):
字符串