Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Соединение двух UPDATE запросов в один (MySQL) (case,when,then)

dsfsdfsdfdsf dfsdfsdfsfdsd Ученик (93), закрыт 4 года назад
Нужно для оптимизации, соединить два запроса в один.
Речь о игровом сервере, и там это имеет значение.

Вот есть такие два рабочие запроса:

UPDATE `test` SET `Clan` = '-1', `ClanRank` = '-1' WHERE `Clan` = '3' AND `ClanRank` = '6'
UPDATE `test` SET `Clan` = '3', `ClanRank` = '6' WHERE `id` = '4'

p.s. Значение Clan и id подставляются всегда разные при каждом новом запросе.

Есть список игроков. Два столбца (+индекс), Clan и ClanRank
К примеру такие данные:
ID: 1 | Clan: 3 | ClanRank: 6
ID: 2 | Clan: 3 | ClanRank: 6
ID: 3 | Clan: 3 | ClanRank: 4
ID: 4 | Clan: -1 | ClanRank: -1

В результате запросов должно получиться так:
ID: 1 | Clan: -1 | ClanRank: -1
ID: 2 | Clan: -1 | ClanRank: -1
ID: 3 | Clan: 3 | ClanRank: 4
ID: 4 | Clan: 3 | ClanRank: 6

В интернете нарыл способ.
Он выполняет то что мне нужно. Но изменяет только один столбец.

UPDATE test SET ClanRank =
CASE
WHEN id = 3 THEN 6
WHEN Clan = 3 AND ClanRank = 6 THEN -1
end;

Как заставить его еще изменить столбец Clan? Возможно ли это вообще?
Как не пытался добавить, выдает ошибку о неверном синтаксисе.
Лучший ответ
クマのプーさん Мудрец (15499) 4 года назад
у тебя проблема в логике
результат твои двух обновлений зависит от их порядка
а ты их собираешься в один update слить
dsfsdfsdfdsf dfsdfsdfsfdsdУченик (93) 4 года назад
Это похоже на бред больного человека.
Но это работает...

В чем нюансы такого запроса?
Или можно спокойно юзать?

UPDATE test SET
Clan =
CASE
WHEN id = '4' THEN '3'
WHEN Clan = 3 AND ClanRank = '6' THEN '-1'
ELSE Clan
END,
ClanRank =
CASE
WHEN id = '4' THEN '6'
WHEN Clan = '-1' AND ClanRank = '6' THEN '-1'
ELSE ClanRank
END;
クマのプーさん Мудрец (15499) это и есть бред
Остальные ответы
☘️ Green ☘️ Гуру (2757) 4 года назад
UNION
dev.mysql.com/doc/refman/5.7/en/union.html
или
;
Похожие вопросы