我在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 回答
复制时,我得到以下结果:
这似乎是正确的,因为您的源数据中
state = 1
为state = 1
和data = 2, 4
为state = 2
.为什么你在第一张唱片中期待
2
?