MySQL插入。。。选择。。。关于重复密钥更新增量

MySQL插入。。。选择。。。关于重复密钥更新增量,mysql,sql,insert-update,Mysql,Sql,Insert 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, PRI

我在重复密钥更新查询中插入选择时遇到一些问题。我想为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`)
    ) ;
表目的地

    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
这似乎是对的,因为在源数据中有
state=1的
data=1
data=2,4的
state=2


为什么您希望第一条记录中出现
2

+1用于发布脚本。一切都像@Link一样!我不是。我从我创建的测试数据库复制它时犯了一个错误。谢谢你指出这一点。然而,我遇到的问题是第二排。谢谢@Quassnoi@Link例如我无法重现这个问题。你确定不是来自测试数据库吗?还是不确定问题出在哪里,但我似乎已经解决了。事实上,问题似乎并不在于INSERT-SELECT更新代码,但我认为更多的是我的列引用的问题。始终使用完全限定的列名。>>