2016-03-11 31 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