2012-12-18 83 views
1

我想現有的數據庫和表在這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')); 

這可能嗎?

回答

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

您可以在the sqlite manual找到更多的信息。

+0

我是否可以在不刪除表格或創建其他表格的情況下改變article_id的唯一性? –

+0

確定你可以嘗試'在Actions(article_id)上創建唯一索引unique_name;' – Kuf

+0

創建唯一索引實際上並不改變表格,但它創建了一個索引。有沒有辦法改變表格以使article_id獨一無二? –

0

如果您希望article_id唯一,那麼article_id應該是主鍵,而不是action_id。

+0

限制唯一性的效果是一樣的,但'UNIQUE'和'PRIMARY KEY'不一樣。 –

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; 
-1

爲什麼不能添加UNIQUE約束?

ALTER TABLE Actions 
ADD UNIQUE (article_id); 
+0

這不起作用,因爲您無法更改SqLite中的列。至少不是我所知道的。 –

相關問題