我想从mysql中的两个不同的表更新两个不同的列。这是我想要做的简要版本。
更详细地说,我想仅在条件为真时更新表1中的列。否则我想更新表1中的其他列。
我想为表2做同样的事情,这应该都是在一个UPDATE语句中完成的。
我试过这样的事情:
UPDATE `grouped_messages`
JOIN `messages` ON (`messages`.group_msg_id = 1) SET
(CASE WHEN(`grouped_messages`.`conversation_partner1`=10) THEN `grouped_messages`.`deletion_status_partner1`=1
WHEN(`grouped_messages`.`conversation_partner2`=10) THEN `grouped_messages`.`deletion_status_partner2`=1 END),
(CASE WHEN(`messages`.`from`=10) THEN `messages`.`deletion_status_from`=1
WHEN(`messages`.`to`=10) THEN `messages`.`deletion_status_to`=1 END);
但这不起作用。有人知道一个解决方案,这对我的情况有用吗?
答案 0 :(得分:1)
您无法在CASE表达式中执行任务。您的SET
子句无效。它必须是SET column = expression
。
使列有条件地更新;也就是说,要使列不更新,请让表达式返回列的当前值。
我们为g
使用grouped_messages
的别名。
当您检查的条件为真时,您希望SET
子句等效于:
SET g.deletion_status_partner1 = 1
当条件不为true时,您希望将列的当前值分配给自身,因此SET
子句等效于:
SET g.deletion_status_partner1 = g.deletion_status_partner1
要做到这一点,你可以这样做:
SET g.deletion_status_partner1
= CASE WHEN g.conversation_partner1 = 10
THEN 1
ELSE g.deletion_status_partner1 -- existing column value
END
要修改其他列,您需要添加到SET
子句
, g.deletion_status_partner2
= CASE WHEN some_other_condition
THEN new_value
ELSE g.deletion_status_partner2 -- existing column value
END
(我还没有检查你的陈述中的任何其他内容;我只强调最明显的问题,以及如何获得更新声明以及#34;条件"赋值。)