MAX()vs ON DUPLICATE KEY UPDATE

时间:2017-03-16 19:07:45

标签: mysql

   INSERT INTO counters (REQUEST_ID, MODIFIED_DATE_WFM) 
SELECT 
si_id, MAX(modified_date) AS field 
FROM tt 
group by si_id
  ON DUPLICATE KEY UPDATE
MODIFIED_DATE_WFM = VALUES(modified_date)

错误SQL(1054):“字段列表”中的未知列'modified_date'

我试过使用子查询:

select * from (SELECT 
    si_id, MAX(modified_date) AS field 
    FROM tt 
    group by si_id) sub1

和别名:

  ON DUPLICATE KEY UPDATE
MODIFIED_DATE_WFM = VALUES(field)

但请选择:

SELECT 
    si_id, MAX(modified_date) AS field 
    FROM tt 
    group by si_id

是工作

FOR TEST: FITS TABLE:

 CREATE TABLE `counters` (
        `REQUEST_ID` BIGINT(20) NULL DEFAULT NULL,
        `MODIFIED_DATE_WFM` INT(11) NULL DEFAULT NULL,
        UNIQUE INDEX `REQUEST_ID` (`REQUEST_ID`)
    )
    COLLATE='utf8_general_ci'
    ENGINE=InnoDB
    ;

第二表:

CREATE TABLE `tt` (
    `si_id` BIGINT(20) NOT NULL,
    `modified_date` INT(11) NOT NULL,
    INDEX `si_id` (`si_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

DATA:

INSERT INTO `tt` VALUES (2574604, 1486086672);
INSERT INTO `tt` VALUES (2574604, 1487116221);
INSERT INTO `tt` VALUES (2574604, 1487971423);
INSERT INTO `tt` VALUES (2574604, 1488136028);
INSERT INTO `tt` VALUES (2574604, 1488136324);
INSERT INTO `tt` VALUES (2574604, 1488524248);
INSERT INTO `tt` VALUES (2574604, 1488728989);
INSERT INTO `tt` VALUES (2834403, 1488782168);

服务器版本:5.7.16 MySQL社区服务器(GPL)

1 个答案:

答案 0 :(得分:1)

您在更新时的更新错误。试试吧:

INSERT INTO counters (REQUEST_ID, MODIFIED_DATE_WFM) 
SELECT 
si_id, MAX(modified_date) AS `field` 
FROM tt 
group by si_id
  ON DUPLICATE KEY UPDATE
MODIFIED_DATE_WFM = VALUES(MODIFIED_DATE_WFM);

点击此处:http://rextester.com/MCR40199

相关问题