Обновление нескольких записей разными данными значениями в SQL
Тема данной статьи подсказана посетителем сайта, за что огромное вам спасибо, Василий.
Итак, задача заключается в том, чтобы реализовать SQL запрос, который будет менять данные сразу в нескольких строках таблицы. Если не принимать во внимание то, что значение для каждой строки могут быть разными, то можно выполнить простой запрос на обновление:
UPDATE goods SET price = 150 WHERE num = 2 OR num = 3;
UPDATE goods SET price = 150 WHERE num IN (2, 3);
В этих случаях, в двух строках поля price будет внесено одинаковое значение 150. Нам же необходимо, внести в таблицу разные значения.
Для множественного выбора, во многих языках программирования имеется конструкция CASE. Именно оно подходит, для одного из наиболее простых решений нашей задачи:
UPDATE goods SET price = CASE num WHEN 1 THEN 500 WHEN 2 THEN 600 … ELSE price END
Первая строка запроса содержит указание на обновляемую таблицу (goods). Затем указывается поле, которому будет присваиваться новое значение, после чего начинается конструкция CASE. В ней задается поле (num), по которому определяется изменяемая строка.
Вторая и третья строки содержат указание на новые значения цены (500, 600) которые следует вносить в таблицу, в зависимости от номера строки (значения num — 1,2).
Последняя строка завершает конструкцию CASE, где после ELSE, снова указано изменяемое поле. Это сохранит записи, которые не вошли в список, без изменения.
Как обновить несколько строк в sql
1. Перетащите действие Обновить строки в Соединителе SQL на канву, наведите указатель на это действие и щелкните или дважды щелкните действие.
Откроется окно «Обновить строки».

2. При необходимости измените поле Метка . По умолчанию наименование метки совпадает с наименованием действия.
3. В списке База данных выберите тип базы данных, с которой требуется соединиться.
◦ PostgreSQL
◦ SQL Server
Если соединение для соединителя SQL было добавлено ранее, выберите соединение из списка.
5. В списке Таблица выберите нужную таблицу базы данных, в которой требуется обновить строки.
Можно обновить несколько строк за один раз.
6. В группе Где в списке Соединить предложения с помощью выберите одну из следующих опций:
◦ И — все условия, указанные в группе Атрибуты , должны возвращать значение «истина».
◦ ИЛИ — хотя бы одно из условий, указанных в группе Атрибуты , должно возвращать значение «истина».
Если не выбрано ни одно условие в группе Где , действие обновляет все строки в выбранной таблице.
7. В группе Атрибуты щелкните Добавить и выполните следующие действия.
a. В списке Атрибут выберите столбец, который требуется фильтровать.
b. В списке Операторы выберите соответствующий условный оператор.
c. В поле Значение введите значение столбца для фильтра.
![]()
Щелкайте Добавить , чтобы добавить несколько атрибутов в оператор объединения. Можно также щелкать значок , чтобы удалять атрибуты.
Если добавляются одни и те же атрибуты и выбирается И в списке Соединить предложения с помощью , атрибуты объединяются оператором ИЛИ .
8. В группе Задать столбцы выполните следующие действия.
a. В списке Столбец выберите столбец, для которого нужно добавить значение для обновляемой строки.
Если существует ограничение НЕ NULL для каких-либо столбцов в таблице, убедитесь, что заданы значения для этих столбцов. Эти столбцы перечисляются как обязательные поля в списке Столбец .

b. В поле Значение введите значение, которое нужно добавить в выбранный столбец.
Если столбец имеет существующее значение и требуется удалить значение из этого столбца, укажите поле Значение как
9. Нажмите кнопку Готово .
Схема вывода
Схема вывода для действия Обновить строки возвращает строку сообщения и числовое значение с количеством строк, которые были обновлены.
SQL Обновление нескольких строк одним запросом
Здравствуйте, у меня есть таблица в которой есть столбцы (u, name и.д.). На скрипт приходят данные(много данных) со значениями (u, name и.д.). Надо обновить все строки по столбцу u одним запросом. Надо что-то вроде такого:
UPDATE table_name SET colum_name1 = VALUES('value1', 'value2', . 'valuenN'), colum_name2 = VALUES('value1', 'value2', . 'valuenN') WHERE colum_name3 IN ('value1', 'value2', . 'valuenN');
Отслеживать
задан 3 авг 2016 в 8:47
43 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
Вы в условиях where в update задайте что бы оно обрабатывало все нужные строчки, он все и обновит
3 авг 2016 в 8:52
Я добавил что мне примерно нужно.
3 авг 2016 в 9:05
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Боюсь только как то так:
UPDATE table_name JOIN ( select 'val1x' as v1, 'val1y' as v2, 'val1z' as v3 union select 'val2x', 'val2y', 'val2z' union select 'val3x', 'val3y', 'val3z' ) A ON A.v3=table_name.colum_name3 SET colum_name1 = A.v1, colum_name2 = A.v2
Или использовать REPLACE, по синтаксису совпадающий с INSERT, при условии, что colum_name3 первичный или уникальный ключ. Но при этом записи будут удалятся и вставляться, что может плохо отразится на связанных таблицах.
Отслеживать
ответ дан 3 авг 2016 в 9:15
44.1k 3 3 золотых знака 35 35 серебряных знаков 66 66 бронзовых знаков
Спасибо за решение проблемы. Только у меня вопрос. Почему в строке select ‘val1x’ as v1, ‘val1y’ as v2, ‘val1z’ v3 В последнем значении отсутствует as
3 авг 2016 в 9:34
@Kasper Пропустил 🙂 Вообще эти AS только для наглядности, MySQL как и многие другие СУБД этого не требуют, можно имена колонок и без них писать
3 авг 2016 в 9:45
Вариант 1:
UPDATE `table` SET `name`= CASE WHEN `name`='test' THEN 'testing' WHEN `name`='test2' THEN 'testing2' WHEN `name`='test3' THEN 'testing3' ELSE `test` END .
Вариант 2:
INSERT INTO `table` (u, name, age) VALUES ('value1', 'value2', 5), ('value1', 'value2', 28), ('value1', 'value2', 28) ON DUPLICATE KEY UPDATE name = VALUES(name), age = VALUES(age)
U — уникальный ключ
Я Вам советую, не использовать данные конструкции, а выполнять обновление через одну команду в наборе команд транзкакции, так получается время блокировки на отдельную запись намного меньше и работает это быстрее и по «факту».
Как обновить несколько строк одним запросом MS SQL?

Здравствуйте! Есть таблица с двумя строчками:
Мне нужно обновить или одну строку или обе одновременно, причем в каждом случае поля Lat и Lng обновляются вместе. Написал запрос:
INSERT INTO MyGMap (id, Lat, Lng) VALUES (1,'1','2'), (2,'3','4') ON DUPLICATE KEY UPDATE Lat=VALUES(Lat), Lng=VALUES(Lng)
Выдает ошибку, что «неверный синтаксис около ON», а так же подчеркивает VALUES, id, Lat и Lng. Подскажите, что неправильно?
- Вопрос задан более трёх лет назад
- 5186 просмотров
Комментировать
Решения вопроса 1

Константин Цветков @tsklab Куратор тега Transact-SQL
Здесь отвечаю на вопросы.
UPDATE Markers SET Lat = CASE ID WHEN 1 THEN '1' WHEN 2 THEN '3' END, Lng = CASE ID WHEN 1 THEN '2' WHEN 2 THEN '4' END WHERE ID IN (1, 2)
Ответ написан более трёх лет назад
Нравится 1 1 комментарий
