2016-03-11 62 views
0

我有一個表,它看起來像下面如何使用MySQL的加入來處理重複插入時,有沒有主鍵 - MySQL的

CREATE TABLE `groups` (
`id_rec` INT(11) NOT NULL DEFAULT '0', 
`id_group` INT(11) NOT NULL DEFAULT '0', 
UNIQUE INDEX `unikum` (`id_rec`, `id_group`), 
INDEX `idxgroup` (`id_group`)) 

有像表的ID沒有主鍵上,我可以在重複密鑰子句中使用插入。現在我正嘗試在組表中插入多行與signle MySQL查詢,但我不想插入重複項。現在,我想出的解決方案是創建並插入另一個臨時表,然後在組表和臨時表上使用聯接,以查找重複或非重複(新)記錄。

臨時表看起來像下面

CREATE TEMPORARY TABLE IF NOT EXISTS $tempTable 
(id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY, 
group_id INT(11) NOT NULL, 
id_rec INT(11) NOT NULL) 

現在,在這一點上我不知道它加入我應該使用。任何幫助將grealty讚賞。

回答

1

您不需要ON DUPLICATE KEY UPDATE的主鍵就可以工作。你擁有的獨特索引是完全正確的。

您也可以使用INSERT IGNORE

INSERT IGNORE INTO `groups` VALUES (1, 1); 

如果對(1, 1)您的表,然後上面的語句將被簡單地忽略已經存在。

Demo here

+0

太棒了!這看起來很有希望,但一個簡單的問題。這可以處理多個記錄,比如INSERT IGNORE INTO'groups' VALUES(1,1),(1,2),(1,3);? – Shaonline

+1

@Shaonline在這種情況下,重複的值將被跳過,其餘的將被插入。看看[這裏](http://sqlfiddle.com/#!9/31d2f/1)的演示。 –

+0

你能看看這個嗎? http://stackoverflow.com/questions/35943395/how-to-perform-b​​atch-operation-using-mysql-and-php – Shaonline