vicontfreetime
Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Туплю сегодня Есть две таблицы одинакового формата: CREATE TABLE `one` ( `num` int(11) NOT NULL, // измерение `left` bigint(20) NOT NULL, // левая граница отрезка `right` bigint(20) NOT NULL, // правая граница отрезка `count` int(11) NOT NULL, / число отрезков UNIQUE KEY `num_left_right` (`num`, `left`, `right`)); // не может быть двух записей с одинаковым набором (num,left,right) CREATE TABLE `two` ( `num` int(11) NOT NULL, `left` bigint(20) NOT NULL, `right` bigint(20) NOT NULL, `count` int(11) NOT NULL, UNIQUE KEY `num_left_right` (`num`, `left`, `right`)); Хочется создать таблицу three: CREATE TABLE `three` ( `num` int(11) NOT NULL, `left` bigint(20) NOT NULL, `right` bigint(20) NOT NULL, `count1` int(11) NOT NULL, `count2` int(11) NOT NULL, UNIQUE KEY `num_left_right` (`num`, `left`, `right`)); являющейся суммой этих двух таблиц, т.е. если в двух таблицах встретились два одинаковых отрезка в одном измерении, например: {num, left, right, count} (4, 112, 234, 2) + (4, 112, 234, 7) то результатом будет {num, left, right, count1, count2} (4, 112, 234, 2, 7) а если отрезок есть только в первой таблице, то результатом должен быть обнуленный count2: (4, 112, 234, 2) + (нет таких данных) => (4, 112, 234, 2, 0) На мой взгляд, должно быть что-то вроде: insert into `three` (`num`, `left`, `right`, `count1`) select num, left, right, count as count1 from one order by `num`; insert into `three` (`num`, `left`, `right`, `count2`) select `num`, `left`, `right`, `count` as `count2` from `two` order by `num` on duplicate key update `three`.`count2` = `two`.`count`; Я прав или где-то напутал? |