У меня возникли проблемы с запросом 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`)
);
Таблица dest
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
Вместо добавления к предыдущему значению оно заменяет его.
Есть предложения?