Дано: три больших таблицы (first, second, third) вида
CREATE TABLE `first` (
`id` bigint(20) NOT NULL,
`chr` int(11) NOT NULL,
`left` bigint(20) NOT NULL,
`right` bigint(20) NOT NULL,
`count` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
содержащих данные и четвертая (такая же) - пустая.
chr, left, right - сочетание этих трёх параметров уникально, т.е. {1, 4567, 4689} встретится не более одного раза в каждой таблице. Задача: Просуммировать поле count всех трёх таблиц для каждого сочетания {chr, left, right} и внести данные в четвёртую таблицу. Причем, возможны ситуации, когда конкретное сочетание не встречается в одной или двух таблицах
Как это сделать сторонними средствами - знаю. Возможно ли сделать это средствами MySQL?
Это будет что-то вроде
CREATE TABLE `forth` (
`chr` int(11) NOT NULL,
`left` bigint(20) NOT NULL,
`right` bigint(20) NOT NULL,
`count` int(11) NOT NULL,
UNIQUE KEY `chr_left_right` (`chr`, `left`, `right`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
INSERT INTO `forth` (`chr`, `left`, `right`, `count`)
SELECT `chr`, `left`, `right`, `count`
FROM `first`;
INSERT INTO `forth` (`chr`, `left`, `right`, `count`)
SELECT `chr`, `left`, `right`, `count` cnt
FROM `second`
ON DUPLICATE KEY UPDATE
`count` = `count` + cnt;
INSERT INTO `forth` (`chr`, `left`, `right`, `count`)
SELECT `chr`, `left`, `right`, `count` cnt
FROM `third`
ON DUPLICATE KEY UPDATE
`count` = `count` + cnt;
В вопросе не сказано, что делать с полем ID. Но как я понял, это синтетический ключ, значение которого не нужно.
Вот таким образом можно сделать:
INSERT INTO summary (`chr`, `left`, `right`, `count`)
SELECT `chr`, `left`, `right`, SUM(`count`) FROM (
SELECT `chr`, `left`, `right`, `count` FROM first
UNION ALL
SELECT `chr`, `left`, `right`, `count` FROM second
UNION ALL
SELECT `chr`, `left`, `right`, `count` FROM third
) s
Вот так:
INSERT INTO fourth (`chr`, `left`, `right`, `count`)
select chr, left,right, SUM (count) as sum_
from (select chr, left,right, count
from first
union all
select chr, left,right, count
from second
union all
select chr, left,right, count
from third)
group by chr, left,right
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Салют! Не могу понять что происходит не так с подключением к базе данныхПодключаюсь под админом
Всем приветСтало интересно, а что происходит, когда в БД (MySQL) накапливается более 100+млн записей? Они как-либо архивируются/как происходит...
Стоит задача написать некую среду для моделированияВ ней пользователю предложены какие-то готовые модельки и алгоритмы