1

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

我本可以使用Insert or replace,但article_tags表没有primary key,因为它是一个关系表。

不支持sqliteas我如何编写此查询。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)
4

2 回答 2

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.

于 2013-05-18T04:45:36.267 回答
1

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

insert into article_tags 
  select 2, 7 
  where  not exists ( select * 
                      from   article_tags 
                      where  article_id = 2 
                        and  tag_id     = 7 )
于 2013-05-18T05:09:29.857 回答