sqlite3如果存在替代

时间:2013-05-18 04:40:12

标签: sqlite

我正在尝试对sqlite运行简单查询,如果不存在则更新记录。

我本可以使用Insert or replacearticle_tags表没有任何primary key,因为它是关系表。

如何为 sqlite 编写此查询,因为不支持 if not exists 。 而且我不知道如何使用 CASE 来实现

表格结构:

articles(id, content)
article_tags(article_id, tag_id)
tag(id, name)

尝试了SQLITE不正确的语法

insert into article_tags (article_id, tag_id ) values ( 2,7)
if not exists  (select 1 from article_tags where article_id =2 AND tag_id=7)

2 个答案:

答案 0 :(得分:2)

我认为正确的方法是主键添加到article_tags表,这是一个跨越两列的复合表。这是执行多对多关系表的常规方法。

换句话说(伪DDL):

create table article_tags (
    article_id  int references articles(id),
    tag_id      int references tag(id),
    primary key (article_id, tag_id)
);

这样,插入重复对会失败,而不必诉诸if not exists

答案 1 :(得分:1)

这似乎有效,尽管我会像其他人所说的那样,建议你在桌面上添加一些约束,然后简单地“尝试”插入。

insert into article_tags 
  select 2, 7 
  where  not exists ( select * 
                      from   article_tags 
                      where  article_id = 2 
                        and  tag_id     = 7 )