Можно ли обновить обе колонки с помощью одного оператора случай?
Номер A CASE
выражение имеет одно атомное значение. Одно выражение CASE
не может иметь значение двух полей. Вы не можете установить как request_status_id
, так и is_changed
при одном использовании CASE ... END
.
Можно обновить оба поля в одном и том же заявлении UPDATE
, но не то же самое выражение CASE
.
Однако ваше выражение не проблематично, и ваши задания здесь не будут наступать друг на друга. Данные, которые читаются, блокируются, когда инструкция начинает выполняться. Он использует таблицу, как она существовала до запуска оператора.
Рассмотрим:
CREATE TABLE TestTable (
Odd TINYINT NOT NULL,
Even TINYINT NOT NULL,
PRIMARY KEY (Odd, Even)
);
INSERT INTO TestTable (Odd, Even) VALUES (1, 2);
INSERT INTO TestTable (Odd, Even) VALUES (3, 4);
INSERT INTO TestTable (Odd, Even) VALUES (5, 6);
INSERT INTO TestTable (Odd, Even) VALUES (7, 8);
SELECT * FROM TestTable;
UPDATE TestTable SET Odd = Even, Even = Odd;
SELECT * FROM TestTable;
SQLFiddle
Если вы делаете что-то странное, как рекурсивный КТР, данные в значительной степени установить, как они были до выполнения инструкции.
Я считаю, что вам нужно скопировать-вставить аргумент case-when несколько раз – abatishchev
Проблема только в псевдониме PHP? Работает ли он, если вы его оставите? –
@JamesZ мне не нужны эти псевдонимы ... там некоторые основные JOINS –