首页 文章

MySQL INSERT ... SELECT ... ON DUPLICATE KEY UPDATE增量

提问于
浏览
3

我在INSERT SELECT ON DUPLICATE KEY UPDATE查询中遇到了一些问题 . 我想执行一些操作,例如为select返回的每个行插入的表中的字段的增量,其中一些将需要更新同一行 .

Build :

Table source

CREATE TABLE `source` (
  `key` int(11) NOT NULL AUTO_INCREMENT,
  `data` int(11) DEFAULT NULL,
  `state` int(11) DEFAULT NULL,
  `group` int(11) DEFAULT NULL,
  PRIMARY KEY (`key`)
);

Table dest

CREATE TABLE `dest` (
      `dkey` int(11) NOT NULL,
      `ddata` int(11) DEFAULT NULL,
      `dstate` int(11) NOT NULL,
      PRIMARY KEY (`dkey`,`dstate`)
    ) ;

Source Test Values

INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (1,1,1,1);  
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (2,2,2,1);   
INSERT INTO `source` (`key`,`data`,`state`,`group`) VALUES (8,4,2,1);

查询:

INSERT INTO `test`.`dest` (`dkey`,`ddata`,`dstate`)   
    SELECT `group`,`data`,`state` FROM `test`.`source`   
    WHERE `group` = 1  
    ON DUPLICATE KEY UPDATE  
     `ddata`= `ddata`+VALUES(`ddata`);

我需要它做的是当dest中的行不存在而创建一个data = 1的新行时 . 当行已经存在时,我需要它来增加数据 .

执行上述查询后,结果为:

dkey ddata dstate  
1 1 1  
1 4 2

我希望他们成为什么样的人

1 1 1  
1 6 2

它不是添加到以前的值而是替换它 .

有什么建议?

1 回答

  • 1

    复制时,我得到以下结果:

    1, 1, 1
    1, 6, 2
    

    这似乎是正确的,因为您的源数据中 state = 1state = 1data = 2, 4state = 2 .

    为什么你在第一张唱片中期待 2

相关问题