1

我在现有的数据库和表上尝试这个 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'));

这可能吗?

4

4 回答 4

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_idUNIQUE键:

create unique index unique_name on Actions (article_id );

您可以在sqlite 手册中找到更多信息。

于 2012-12-18T11:45:32.167 回答
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;
于 2012-12-18T12:22:25.777 回答
0

当您希望 article_id 唯一时,article_id 应该是主键,而不是 action_id。

于 2012-12-18T11:46:49.277 回答
-1

为什么不能添加UNIQUE约束?

ALTER TABLE Actions
ADD UNIQUE (article_id);
于 2012-12-18T12:24:27.133 回答