2012-08-14 43 views
0

查詢使用這裏插入查詢中是否有任何選項可以避免重複輸入和比較兩個字段?

INSERT INTO tags (name, type, tag_type_id) SELECT name, 'open', (SELECT id from types where name = tag_types.name) FROM tag_types 

它可以有值,如下面

INSERT INTO tags (name, type, tag_type_id) ('first', 'open', 2), ('second', 'open', 5), ('first', 'open', 2); 

我不想重複像上面的條目。我需要檢查表中是否存在具有相似值的nametag_type_id。如果存在,請避免重複輸入。

如何通過更改上述查詢來避免條目的重複?

我沒有字段中的索引。

+1

1.唯一索引2.只是不要把重複的查詢,就這麼簡單,因爲它是 – zerkms 2012-08-14 07:54:22

+0

@zerkms:我不能爲'使獨特name'或'tag_type_id'。有值可以改變。我只想避免重複,當兩個字段的組合與現有行相同時。 – 2012-08-14 07:56:53

+0

「我無法爲名稱或tag_type_id設置唯一的名稱。」 ---如果你不能,那麼你不需要那樣做。 – zerkms 2012-08-14 08:01:55

回答

2

你需要做的是創建一個跨越你想保留爲唯一的兩列的唯一索引,然後改變你的插入語句來讀取INSERT IGNORE INTO ...這將防止重複進入表格。

ALTER TABLE tags ADD UNIQUE INDEX unq_name_type (name, tag_type_id); 

然後插入;

INSERT IGNORE INTO tags (name, type, tag_type_id) ('first', 'open', 2), ('second', 'open', 5), ('first', 'open', 2); 

INSERT IGNORE INTO tags (name, type, tag_type_id) SELECT name, 'open', (SELECT id from types where name = tag_types.name) FROM tag_types; 

希望幫助:)