Mysql 使用额外条件更新 2 个不同表中的 2 列
Mysql Update 2 columns from 2 different tables with extra condition
我想更新 mysql 中两个不同 table 的两个不同列。这是我想做的事情的简短版本。
更详细地说,我只想在条件为真时从 table 1 更新列。否则我想从 table 1.
更新另一列
我想为 table 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);
但这不起作用。有人知道适合我的情况的解决方案吗?
您不能在 CASE 表达式中进行赋值。您的 SET
子句无效。必须是 SET column = expression
.
有条件地更新列;也就是说,要更新列 not,请使用表达式 return 列的 当前值 。
让我们使用 g
作为 grouped_messages
的别名。
当您检查的条件为真时,您希望 SET
子句等效于:
SET g.deletion_status_partner1 = 1
当条件不为真时,要将列的当前值赋给自己,所以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
(我没有检查您的陈述中的任何其他内容;我只强调了最明显的问题,以及如何获取更新语句来执行 "conditional" 赋值。)
我想更新 mysql 中两个不同 table 的两个不同列。这是我想做的事情的简短版本。
更详细地说,我只想在条件为真时从 table 1 更新列。否则我想从 table 1.
更新另一列我想为 table 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);
但这不起作用。有人知道适合我的情况的解决方案吗?
您不能在 CASE 表达式中进行赋值。您的 SET
子句无效。必须是 SET column = expression
.
有条件地更新列;也就是说,要更新列 not,请使用表达式 return 列的 当前值 。
让我们使用 g
作为 grouped_messages
的别名。
当您检查的条件为真时,您希望 SET
子句等效于:
SET g.deletion_status_partner1 = 1
当条件不为真时,要将列的当前值赋给自己,所以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
(我没有检查您的陈述中的任何其他内容;我只强调了最明显的问题,以及如何获取更新语句来执行 "conditional" 赋值。)