来自2个不同表的Mysql Update 2列,具有额外条件

时间:2015-04-06 18:49:30

标签: mysql inner-join

我想从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);

但这不起作用。有人知道一个解决方案,这对我的情况有用吗?

1 个答案:

答案 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;条件"赋值。)