SQL - обновление нескольких записей в одном запросе
У меня есть таблица - config.
Схема:
config_name | config_value
И я хотел бы обновить несколько записей в одном запросе. Я пробую вот так:
UPDATE config
SET t1.config_value = 'value'
, t2.config_value = 'value2'
WHERE t1.config_name = 'name1'
AND t2.config_name = 'name2';
но этот запрос неверен:(
Можете ли вы мне помочь?
Ответы
Ответ 1
Попробуйте либо синтаксис обновления нескольких таблиц
UPDATE config t1 JOIN config t2
ON t1.config_name = 'name1' AND t2.config_name = 'name2'
SET t1.config_value = 'value',
t2.config_value = 'value2';
Вот SQLFiddle demo
или условное обновление
UPDATE config
SET config_value = CASE config_name
WHEN 'name1' THEN 'value'
WHEN 'name2' THEN 'value2'
ELSE config_value
END
WHERE config_name IN('name1', 'name2');
Вот SQLFiddle демо
Ответ 2
Вы можете выполнить его с помощью INSERT, как показано ниже:
INSERT INTO mytable (id, a, b, c)
VALUES (1, 'a1', 'b1', 'c1'),
(2, 'a2', 'b2', 'c2'),
(3, 'a3', 'b3', 'c3'),
(4, 'a4', 'b4', 'c4'),
(5, 'a5', 'b5', 'c5'),
(6, 'a6', 'b6', 'c6')
ON DUPLICATE KEY UPDATE id=VALUES(id),
a=VALUES(a),
b=VALUES(b),
c=VALUES(c);
Вставка новых значений в таблицу, но если первичный ключ дублируется (уже вставлен в таблицу), то указанные вами значения будут обновляться, и одна и та же запись не будет вставлена второй раз.
Ответ 3
возможно, кому-то это будет полезно
для Postgresql 9.5 работает как прелесть
INSERT INTO tabelname(id, col2, col3, col4)
VALUES
(1, 1, 1, 'text for col4'),
(DEFAULT,1,4,'another text for col4')
ON CONFLICT (id) DO UPDATE SET
col2 = EXCLUDED.col2,
col3 = EXCLUDED.col3,
col4 = EXCLUDED.col4
этот SQL обновляет существующую запись и вставляет новый (2 в один)
Ответ 4
в моем случае я должен обновить записи, которые больше 1000, для этого, а не для того, чтобы каждый раз, когда я предпочитаю это, ударять запрос на обновление,
UPDATE mst_users
SET base_id = CASE user_id
WHEN 78 THEN 999
WHEN 77 THEN 88
ELSE base_id END WHERE user_id IN(78, 77)
78,77 - это идентификаторы пользователя, и для этого идентификатора пользователя мне нужно обновить base_id 999 и 88 соответственно. Это работает для меня.
Ответ 5
Выполните приведенный ниже код, если вы хотите обновить всю запись во всех столбцах:
update config set column1='value',column2='value'...columnN='value';
и если вы хотите обновить все столбцы определенной строки, выполните ниже код:
update config set column1='value',column2='value'...columnN='value' where column1='value'