Дано: три больших таблицы (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
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Салют! Не могу понять что происходит не так с подключением к базе данныхПодключаюсь под админом
Всем приветСтало интересно, а что происходит, когда в БД (MySQL) накапливается более 100+млн записей? Они как-либо архивируются/как происходит...
Стоит задача написать некую среду для моделированияВ ней пользователю предложены какие-то готовые модельки и алгоритмы