MySQL插入。。。选择。。。关于重复密钥更新增量
我在重复密钥更新查询中插入选择时遇到一些问题。我想为select返回的每一行执行一些操作,例如在插入的表中增加一个字段,其中一些需要更新同一行 设立: 表格来源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
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更新代码,但我认为更多的是我的列引用的问题。始终使用完全限定的列名。>>