gpt4 book ai didi

MySQL INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 增量

转载 作者:可可西里 更新时间:2023-11-01 08:55:23 24 4
gpt4 key购买 nike

我在使用 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 中不存在该行时创建一个数据 = 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 = 1data = 2, 4 用于 state = 2 在您的源数据中。

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

关于MySQL INSERT ... SELECT ... ON DUPLICATE KEY UPDATE 增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5728732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com