MySQL INSERT…选择. .重复键更新增量



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

设置:

表源

    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`)
);

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

源测试值

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, 6, 2

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

为什么你期待2在第一个记录?

相关内容

  • 没有找到相关文章

最新更新