对于邮件系统,我正在尝试为员工2标记相应的to_del和from_del字段。
这是在员工2删除消息之前:
company_id | to | from | to_del | from_del
1 4 2 0 0
1 2 4 0 0
这是在员工2删除消息之后:
company_id | to | from | to_del | from_del
1 4 2 0 1
1 2 4 1 0
我必须运行2个查询才能正常工作:
UPDATE messages SET from_del='1' WHERE company_id=1 AND from=2
UPDATE messages SET to_del='1' WHERE company_id=1 AND to=2
无论如何将这两个查询合并为一个更有效的查询?类似的东西:
UPDATE messages SET from_del='1',to_del='1' WHERE company_id=1 AND (from=2 OR to=2)
这个单一查询的问题是它将所有4个删除字段标记为“1”。关于如何使单个有效查询像上述2个查询一样运行的任何想法?
答案 0 :(得分:2)
听起来像case
...
update messages
set from_del = case when from = 2 then 1 else from_del end
, to_del = case when to = 2 then 1 else to_del end
where company_id = '1'
您需要更新不需要这样的列,但您只执行一次更新,而不是多次查询。
我不喜欢使用from
和to
作为列名...它只是要求混淆......
答案 1 :(得分:0)
如果您正在执行需要两个不同WHERE
子句的更新,那么很遗憾,您将不得不执行两个查询。如果您担心性能问题,可以随时在一个TRANSACTION
中批量处理。