INSERT разными способами - MySQL

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Помогите решить ещё одну задачку. В ней сразу несколько проблем. есть таблица 1, в ней колонки: продукт, номер накладной и другие. В этой таблице все эти значения могут повторяться (и продукты и номера накадных), но не их пары. Номера накладных хранятся в таблице 2. То есть там они все, а в таблице 1 какого-то может не быть. Нужно: найти и вставить строки из таблицы 1 с минимальным номером накладной из таблицы 2 в таблицу же 1, только при вставке вместо номера накладной из поиска чтобы там был максимальный номер накладной из таблицы 2. Загвозка в том как скомбинировать синтаксис INSERT ... SELECT с INSERT ... VALUE для всех столбцов кроме того, что надо задать явно максимальным значением таблицы 2. И вторая проблема. Надо не просто вставить строки, а есть дополнительное условие, что если в таблице 1 уже существуют строки для максимального значения накладной, то продукты, найденные селектом и совпадающие с этими строками вставлять не надо. Сложно это все представить, даже описывать сложно. Помогите...

Решение задачи: «INSERT разными способами»

textual
Листинг программы
INSERT INTO табл1
SELECT продукт, все остальные колонки, max(dmz.NDM)
FROM табл1
JOIN табл2
WHERE продукт NOT IN 
(
SELECT продукт
from табл1
JOIN табл2
GROUP BY продукт, табл1.номер накладной
HAVING табл1.номер накладной = max(табл2.номер накладной)
)
GROUP BY продукт, все остальные колонки, табл1.номер накладной
HAVING
табл1.номер накладной = min(табл2.номер накладной)

Объяснение кода листинга программы

Список шагов, которые делаются в коде:

  1. INSERT INTO табл1 - код выполняет операцию вставки данных в таблицу табл1.
  2. SELECT продукт, все остальные колонки, max(dmz.NDM) - код выполняет операцию выборки данных из таблицы табл1 и табл2. В выборку включаются столбцы продукт и все остальные столбцы, кроме dmz.NDM. Значение max(dmz.NDM) используется для заполнения столбца dmz.NDM в таблице табл1.
  3. FROM табл1 - код выбирает данные из таблицы табл1.
  4. JOIN табл2 - код выполняет операцию объединения (JOIN) данных из таблицы табл2 по соответствующему условию.
  5. WHERE продукт NOT IN (SELECT продукт from табл1 JOIN табл2 GROUP BY продукт, табл1.номер накладной HAVING табл1.номер накладной = max(табл2.номер накладной)) - код выполняет фильтрацию данных, исключая из выборки те строки, где значение столбца продукт присутствует в списке, полученном в результате выполнения подзапроса.
  6. GROUP BY продукт, все остальные колонки, табл1.номер накладной - код группирует данные по значению столбца продукт и всем остальным столбцам, кроме dmz.NDM и табл1.номер накладной.
  7. HAVING табл1.номер накладной = min(табл2.номер накладной) - код выполняет фильтрацию данных, исключая из выборки те строки, где значение столбца табл1.номер накладной не равно минимальному значению столбца табл2.номер накладной. Таким образом, код выполняет операцию вставки данных в таблицу табл1, используя данные из таблицы табл1 и табл2. При этом происходит фильтрация данных, чтобы исключить дубликаты строк и оставить только те строки, где значение столбца табл1.номер накладной равно минимальному значению столбца табл2.номер накладной.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы