首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQLite中的"Insert if not exists“语句

SQLite中的"Insert if not exists“语句
EN

Stack Overflow用户
提问于 2013-10-13 01:19:53
回答 4查看 203.2K关注 0票数 193

我有一个SQLite数据库。我尝试在表bookmarks中插入值(users_idlessoninfo_id),但前提是这两个值之前都不在一行中。

代码语言:javascript
复制
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错误。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-13 01:38:07

如果您有一个名为memos的表,其中有两列idtext,您应该能够这样做:

代码语言:javascript
复制
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的行,则插入操作将被忽略。

我不知道这是否适用于您的特定查询,但它可能会给您一个提示,告诉您如何继续。

我建议您将表设计为不允许重复,如下面的@CLs answer所述。

票数 187
EN

Stack Overflow用户

发布于 2013-10-13 16:10:18

如果您永远不想有重复项,则应将其声明为表约束:

代码语言:javascript
复制
CREATE TABLE bookmarks(
    users_id INTEGER,
    lessoninfo_id INTEGER,
    UNIQUE(users_id, lessoninfo_id)
);

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

然后就可以告诉数据库您想要silently ignore records that would violate such a constraint

代码语言:javascript
复制
INSERT OR IGNORE INTO bookmarks(users_id, lessoninfo_id) VALUES(123, 456)
票数 533
EN

Stack Overflow用户

发布于 2017-12-20 18:10:31

对于唯一列,请使用以下命令:

代码语言:javascript
复制
INSERT OR REPLACE INTO table () values();

有关更多信息,请参阅:sqlite.org/lang_insert

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19337029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档