В MySQL вы можете превратить SELECT
в INSERT
, используя синтаксис INSERT ... SELECT
.
Ваши данные показывают, что вы имеете дело с объединением NM.Первое, что нужно сделать, это переместить агрегацию в подзапросы следующим образом:
INSERT INTO P2_Region_Unique
SELECT s.product_number, s.region, f.forecast, s.sales
FROM
(
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s
LEFT JOIN (
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f ON f.product_number = s.product_number AND f.region = s.region
GROUP BY s.product_number, s.region
Это будет работать, но не будет возвращать записи из обоих концов соединения.Для этого вы можете эмулировать FULL OUTER JOIN (который, как указывает @Nick, не поддерживается в MySQL) с запросами UNION, например:
INSERT INTO P2_Region_Unique
SELECT s.product_number, s.region, f.forecast, s.sales
FROM
(
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s
LEFT JOIN (
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f ON f.product_number = s.product_number AND f.region = s.region
GROUP BY s.product_number, s.region
UNION
SELECT f.product_number, f.region, f.forecast, s.sales
FROM
(
SELECT planning_hierarchy_2 product_number, region_description region, SUM(measure_values) forecast
FROM MI_STAT_TOTAL
GROUP BY planning_hierarchy_2, region_description
) f
LEFT JOIN (
SELECT product_number, region, SUM(item_values) sales
FROM SALES_TOTAL
GROUP BY product_number, region
) s ON f.product_number = s.product_number AND f.region = s.region
GROUP BY f.product_number, f.region
Оператор UNION
удаляет дубликаты в подзапросах.
Эта демонстрация на DB Fiddle дает:
| product_number | region | forecast | sales |
| -------------- | ------ | -------- | ----- |
| aa | ASPAC | 1 | |
| bb | USA | | 2 |
| xx | LATAM | 2 | 1 |
| yy | ASPAC | 3 | 2 |
| zz | EMEA | 5 | 3 |