【发布时间】:2011-08-09 09:09:01
【问题描述】:
我在使用 INSERT SELECT ON DUPLICATE KEY UPDATE 查询时遇到了一些问题。我想为选择返回的每一行执行一些操作,例如在插入的表中增加一个字段,其中一些需要更新同一行。
设置:
表格来源
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 中不存在该行时创建一个数据 = 1 的新行。当该行已经存在时,我需要它来增加数据。
执行上述查询后,结果为:
dkey ddata dstate
1 1 1
1 4 2
我希望他们在哪里
1 1 1
1 6 2
它不是添加到以前的值,而是替换它。
有什么建议吗?
【问题讨论】:
-
+1 用于发布脚本。都像@Link 那样做!
标签: mysql sql insert-update