【问题标题】:How to use mysql join to deal with duplicate insertion when there is no primary key - MySQL没有主键时如何使用mysql join处理重复插入 - MySQL
【发布时间】:2016-06-26 12:31:51
【问题描述】:

我有一张如下图所示的表格

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 这样的主键,我可以在其上使用 insert on duplicate key 子句。现在我正在尝试在组表中插入多行与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)

现在我不确定我应该使用哪个连接。任何帮助将不胜感激。

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    ON DUPLICATE KEY UPDATE 不需要主键即可工作。您拥有的唯一索引非常好。

    您也可以使用INSERT IGNORE:

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

    如果(1, 1) 对已经存在于您的表中,那么上面的语句将被简单地忽略。

    Demo here

    【讨论】:

    • 太棒了!!这看起来很有希望,但这是一个快速的问题。这是否适用于多个记录,例如 INSERT IGNORE INTO groups VALUES (1, 1), (1,2), (1, 3);?
    • @Shaonline 在这种情况下,将跳过重复值并插入其余值。查看here 进行演示。
    • 你能看看这个吗? stackoverflow.com/questions/35943395/…
    猜你喜欢
    • 1970-01-01
    • 2019-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-10
    相关资源
    最近更新 更多