Обновить базу данных случаем, когда значение устанавливается равным '0' - PullRequest
0 голосов
/ 27 июня 2018

Я наблюдаю довольно странное поведение в mysql и был бы очень рад получить совет.

Я хочу обновить поля в столбце с 1 по 4 и с 6 до 9. Для этого я использую в качестве теста

UPDATE `test` SET `id`= case when 'id'= 1 then 4 else 'id' end where id =1

Однако, когда я запускаю вышеупомянутое в phpmyadmin, значения меняются на число 0, а не 4.

Если я запускаю один и тот же запрос без регистра, например

UPDATE `test` SET `id`= 4 WHERE `id` =1

отлично работает.

Когда я бегу

UPDATE `test` SET `id`= 
case when 'id'= 1 then 4 
when 'id'= 6 then 9 

else 'id' end where id in (1,6)

заменяет 1 и 6 на '0'

1 Ответ

0 голосов
/ 27 июня 2018

id - это числовое значение, поскольку идентификаторы обычно имеют тип INT в mysql. Вы дико смешиваете обратные тики (`` `) и ('), поэтому вы неявно приводите строку 'id' к int, что приводит к 0.

select CAST('foo' as UNSIGNED) ---> 0

Так что вы, возможно, захотите изменить запрос на использование обратных галочек все время

UPDATE `test` SET `id`= case when `id` = 1 then 4 else `id` end where `id` = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...