2017-03-16 99 views
0
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) 

ERROR SQL(1054):在 '字段列表'MAX()與對重複密鑰更新

我真的嘗試過使用子查詢未知列 '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 

是工作

測試: FITS表:

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

所以,'counters'表沒有了'MODIFIED_DATE'列。這就是錯誤報告你的原因。順便說一句,它沒有'id'列。 – zerkms

+0

'INSERT INTO個計數器(REQUEST_ID,MODIFIED_DATE_WFM)...'&c。 – bishop

+0

@baao如果他們輸入'MODIFIED_DATE_WFN',將會是一個「打字錯誤」 – zerkms

回答

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

+0

這是什麼邏輯?它的工作TY! –

+0

不客氣。 :D @VladimirLenkov – baao

+0

但是如何=)其不可能)可能是它的錯誤? –