我正在现有数据库和表上尝试此sqlite查询:
INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id, guide_name) VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam');
这样可行,但是如果我再次运行相同的东西,它将插入不需要的重复值。
这就是表格的样子:
这里的问题是article_id不是唯一的。 我希望插入仅在列中不存在article_id时运行。
理论上我想要的是:
IF x DOES NOT EXISTS IN article_id DO (INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id, guide_name) VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam'));
这可能吗?
答案 0 :(得分:2)
尝试:
INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id, guide_name)
VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam') WHERE NOT article_id = x;
另一种方法是将article_id
定义为UNIQUE
键:
create unique index unique_name on Actions (article_id );
您可以在the sqlite manual找到更多信息。
答案 1 :(得分:1)
也许是这样的?
CREATE TRIGGER delete_duplicates_articles
AFTER INSERT ON Article
BEGIN
DELETE FROM Article
WHERE action_date NOT IN (SELECT MIN(action_date)
FROM Article
WHERE article_id = new.article_id)
AND article_id = new.article_id;
END;
答案 2 :(得分:0)
如果您希望article_id是唯一的,那么article_id应该是主键,而不是action_id。
答案 3 :(得分:-1)
为什么不能添加UNIQUE
约束?
ALTER TABLE Actions
ADD UNIQUE (article_id);