Bigata
@Bigata
Web, PHP, JavaScript, HTML, Базы данных, Фриланс

Максимальной количество WHEN THEN в операторе CASE SQL?

Доброго времени суток,

есть скажем такой запрос:

UPDATE `myBD`.`table`
SET
`column1` =  CASE
    WHEN `id` = 1 THEN 'для первого'
    WHEN `id` = 2 THEN 'для второго'
    WHEN `id` = 3 THEN 'для третьего'
ELSE `price` END
WHERE `id` IN (1, 2, 3)

Есть ограничения, сколько WHEN'ов в операторе CASE и соответственно в IN() сколько перечислять именно для MySQL?
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 2
402d
@402d
начинал с бейсика на УКНЦ в 1988
мне кажется вы придумываете инсерт он дупликате кей апдейте
Исходная задача обновить цены в прайсе по новой выгрузке?

insert into `table` (`id`,`price`) values (1,100), (2,100), ..................
on duplicate key update price=values(price)
пока не наберем максимальный размер sql запроса
Ответ написан
erge
@erge
Примус починяю
А почему бы не использовать update inner join ?

update tbl as t
  inner join (
select 1 id, 'Один' text union
select 2   , 'Два' union
select 3   , 'Три' union
select 4   , 'Четыре'
  ) as tt on t.id = tt.id
  set t.text = tt.text
;


пример на dbfiddle

UPD:

реализовать логику ELSE можно используя LEFT JOIN и COALESCE ( IFNULL )

update tbl as t
  left join (
select 1 id, 'Один' text union
select 2   , 'Два' union
select 3   , 'Три' union
select 4   , 'Четыре'
  ) as tt on t.id = tt.id
  set t.text = coalesce(tt.text, 'Другое значение')
;


см. пример на dbfiddle
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы