MySQL 使用 DUPLICATE KEY UPDATE 时出错

标签 mysql macos innodb sql-mode

我有一个项目,每周我都会导入几个包含不正确数据的大型数据集,例如不应重复的重复员工 ID。为了标记重复项,我尝试使用以下代码:

ALTER TABLE AccountDuplicates
  ADD UNIQUE INDEX EmployeeID (EmployeeID);

INSERT INTO AccountDuplicates
  SELECT
    EmployeeID,
    FirstName,
    LastName
  FROM AccountsWork
  ON DUPLICATE KEY UPDATE
    EmployeeID = CONCAT(VALUES(EmployeeID), '*');

INSERT 语句给了我错误,但我看不出我做错了什么:

[42000][1064] You have an error in your SQL syntax; check the manual that correspondsto your MySQL server version for the right syntax to use near 'FROM EAD_UserAccountsWork
           ON DUPLICATE KEY UPDATE EmployeeID = CONCAT(VALUES(E' at line 36

如果相关的话,我正在 OS X 10.11.4 上运行 MySQL 5.7.12,INNODB 引擎并且 mysql_mode = ''。我的目的是识别重复的 ID,以便我可以将它们转发给适当的 DBA 进行更正。

更新:我已将数据库默认设置如下:

[client]
default-character-set = utf8mb4

[mysqld]
sql_mode=''
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

[mysql]
default-character-set = utf8mb4

最佳答案

你的语法看起来没问题,也许有打字错误? 这几乎有效:

-- drop table AccountsWork ;
-- drop table  AccountDuplicates;
CREATE TABLE AccountsWork (
    EmployeeID varchar(16),
    FirstName INT,
    LastName INT
);
CREATE TABLE AccountDuplicates (
    EmployeeID  varchar(16),
    FirstName INT,
    LastName INT
);
    alter table AccountDuplicates add unique index(EmployeeID); 
insert into AccountsWork values('a',2,3);
insert into AccountsWork values(1,2,3);
insert into AccountsWork values('b',2,3);
insert into AccountsWork values('c',2,3);
insert into AccountsWork values('c',2,3);
insert into AccountsWork values('c',2,3);
insert into AccountsWork values('c',2,3);
SELECT 
    *
FROM
    AccountsWork;
-- there is no syntax errors here (your original query):    
INSERT INTO AccountDuplicates
  SELECT
    EmployeeID,
    FirstName,
    LastName
  FROM AccountsWork
  ON DUPLICATE KEY UPDATE
    EmployeeID =  CONCAT(VALUES(EmployeeID), '*');

SELECT 
    *
FROM
    AccountDuplicates;    

使用重复键进行简单插入可以工作,但“在重复键更新时从表中选择”不起作用。

我认为你需要看看这个问题:INSERT INTO ... SELECT FROM ... ON DUPLICATE KEY UPDATE

看起来 mysql 解析器对这种查询感到疯狂

关于MySQL 使用 DUPLICATE KEY UPDATE 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36827582/

相关文章:

php - 无法在magento中查看订单

php - SQL PHP 查询更新不起作用

objective-c - 核心动画 : Frame Rate

objective-c - 如何以编程方式查找用户的日志记录目录?

mysql - 无法将行插入到具有外键字段的表中

mysql - 表锁可以扩展吗?/行锁对于嵌套集会更有效吗?

php - mySQL 登录问题,未选择数据库

php - 需要在 mysql 中查询多层次营销

swift - NSSearchField TextDidChange 的方法是什么?

MySQL :Cannot create cluster Got Error:The server is not configured properly to be an active member of the group