我正在尝试对sqlite运行简单查询,如果不存在则更新记录。
我本可以使用Insert or replace
但article_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)
答案 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 )