случай, когда не будет работать с оператором обновления - PullRequest
0 голосов
/ 27 апреля 2020

Для моего MySQL запроса

update Products
set new_price = (
case when change_date>'2019-08-16' then new_price=100 else new_price end
)
;

оператор обновления устанавливает новую цену равной 0. Почему?

детали таблицы:

insert into Products (product_id, new_price, change_date) values ('1', '20', '2019-08-14');
insert into Products (product_id, new_price, change_date) values ('2', '50', '2019-08-14');
insert into Products (product_id, new_price, change_date) values ('1', '30', '2019-08-15');
insert into Products (product_id, new_price, change_date) values ('1', '35', '2019-08-16');
insert into Products (product_id, new_price, change_date) values ('2', '65', '2019-08-17');
insert into Products (product_id, new_price, change_date) values ('3', '20', '2019-08-18');
select * from Products;

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Он устанавливает значение в ноль, потому что new_price = 100 является логическим выражением - и оценивается либо в 0, либо в 1.

Если это все, что вы делаете, вам следует отфильтровать в where пункт:

update Products
    set new_price = 100
    where change_date > '2019-08-16';
0 голосов
/ 27 апреля 2020

Вы пытаетесь установить new_price для результата логического выражения new_price=100, которое будет 0, если new_price уже не имеет значения 100. Просто удалите new_price= и код будет работать нормально:

update Products
set new_price = case when change_date>'2019-08-16' then 100
                     else new_price
                end

Демонстрация на dbfiddle

...