Вставить новую строку или сменить данные в старой строке, с учетом нескольких неуникальных полей - MySQL

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

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

доброго времени суток! задача: есть некая таблица, допустим строки в ней ID (int) - что логично - уникальный, param1 (int), param2 (int), - эти 3 не уникальны и не ключи param3 (int), value1 (int), value2 (int), - тут хранятся некие значения value3 (int) предположим у нас уже есть некоторые значения
id param1 param2 param3 value1 value2 value3
1 8 8 8 10 20 30
вопрос: можно ли построить 1 запрос, в котором бы либо новая строка по трём параметрам внеслась бы, если таковой еще не было, либо внеслись бы новые value, если строка со всеми трёмя param уже есть? то есть, если вносим param1=8, param2=8, param3=8 и некие value (любые, другие), то изменятся value в строке с id=1. если вносим param1=8, param2=8, param3=2, то такой строки у нас нет и надо добавить новую.

Решение задачи: «Вставить новую строку или сменить данные в старой строке, с учетом нескольких неуникальных полей»

textual
Листинг программы
insert into tst 
    (param1, param2, param3, value1, value2, value3)
values 
    (8, 8, 8, 10, 20, 30),
    (8, 8, 5, 8, 8, 5);
insert into tst 
    (param1, param2, param3, value1, value2, value3)
values 
    (8, 8, 2, 40, 50, 60), -- этого не было
    (8, 8, 8, 1, 2, 3)     -- это уже есть (values увеличится на 1)
on duplicate key update 
    value1 = value1 + 1,
    value2 = value2 + 1,
    value3 = value3 + 1;

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

  1. Код выполняет вставку данных в таблицу tst с использованием оператора insert into ... values ....
  2. Первая строка вставляется с помощью values (8, 8, 8, 10, 20, 30).
  3. Вторая строка вставляется с помощью values (8, 8, 5, 8, 8, 5).
  4. Третья строка вставляется с помощью values (8, 8, 2, 40, 50, 60).
  5. Четвертая строка вставляется с помощью values (8, 8, 8, 1, 2, 3).
  6. Последняя строка on duplicate key update используется для обновления существующих строк, если в таблице уже есть строки с таким же значением в столбцах param1, param2 и param3.
  7. В случае дублирования ключа, значения в столбцах value1, value2 и value3 увеличиваются на 1.
  8. Значения в столбцах value1, value2 и value3 увеличиваются на 1 для каждой строки, которая уже существует в таблице tst.
  9. Результатом выполнения кода будет вставка новых строк и обновление существующих строк в таблице tst.

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


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

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

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