如果值在非唯一行上是唯一的,则仅插入表中

时间:2012-12-18 11:40:12

标签: sql sqlite

我正在现有数据库和表上尝试此sqlite查询:

INSERT INTO Actions (guide_id, user_id, action_type, action_date, article_id,  guide_name) VALUES (33, 1199180, 2, 1355829894, 2457, 'Amsterdam');

这样可行,但是如果我再次运行相同的东西,它将插入不需要的重复值。

这就是表格的样子:

A description of the Table

这里的问题是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 个答案:

答案 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);