mySQL INSERT IGNORE SELECT with UNIQUE KEY 不工作

标签 mysql insert

尝试使用 INSERT INTO SELECT 并连接两个源表来填充一个空的 MySQL 表。想要忽略插入基于定义为UNIQUE KEY 的两个目标表列的重复行,但由于某种原因,仍然插入基于这两列的重复行。

目标表定义:

CREATE TABLE `item` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `item_id` int(10) unsigned NOT NULL,
  `account_id` int(10) unsigned NOT NULL,
  `creation_date` datetime NOT NULL,
  `modification_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `unique_item` (`item_id`,`account_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

插入查询:

INSERT IGNORE INTO item
            (id,
             item_id,
             account_id,
             creation_date,
             modification_date)
SELECT tblItem.ID,
       tblItem.itemID,
       tblOrder.accID,
       tblItem.itemTime,
       '0000-00-00 00:00:00'
FROM   tblItem
   INNER JOIN tblOrder
           ON tblItem.orderID = tblOrder.ID

重复的行被插入到 item 中,类似于以下内容:

id    item_id   account_id  creation_date           modification_date
2587    0       2           11/19/11 2:43           0000-00-00 00:00:00
2575    0       1120        11/17/11 19:32          0000-00-00 00:00:00
2575    0       1120        11/17/11 19:32          0000-00-00 00:00:00
382     60      193         0000-00-00 00:00:00     0000-00-00 00:00:00
941     95      916         10/28/11 15:52          0000-00-00 00:00:00
369     108     1           0000-00-00 00:00:00     0000-00-00 00:00:00
373     108     2           0000-00-00 00:00:00     0000-00-00 00:00:00
378     109     2           0000-00-00 00:00:00     0000-00-00 00:00:00
378     109     2           0000-00-00 00:00:00     0000-00-00 00:00:00

我错过了什么?

提前致谢!

最佳答案

尝试在 SELECT 子句中使用 DISTINCT 关键字:

INSERT IGNORE INTO item
        (id,
         item_id,
         account_id,
         creation_date,
         modification_date)
SELECT DISTINCT tblItem.ID,
   tblItem.itemID,
   tblOrder.accID,
   tblItem.itemTime,
   '0000-00-00 00:00:00'
FROM   tblItem
   INNER JOIN tblOrder
       ON tblItem.orderID = tblOrder.ID

关于mySQL INSERT IGNORE SELECT with UNIQUE KEY 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12207105/

相关文章:

mysql - 如何存储不可变、唯一、有序的列表?

php - 是否可以同时查询具有更多耦合值的表?

MYSQL插入语法

sql - 如何在 SQL Server 中同时将数据插入到两个表中?

mysql - 在存在的地方插入

mysql - 使用单独的更新列插入重复键更新批处理

php - 尝试使用强制唯一标识符将记录添加到带有 MYSQL 和 php 的表中

mysql - 从桥接表中获取组 key

php - 当我通过电子邮件地址选择时,为什么会出现 MySQL 语法错误 (1604)?

PHP 提交表单,在使用 JQuery 时突出显示文本字段错误