对于消息传递系统,我尝试为员工 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
是否有办法将这 2 个查询合并为 1 个更高效的查询?像这样的东西:
UPDATE messages SET from_del='1',to_del='1' WHERE company_id=1 AND (from=2 OR to=2)
此单个查询的问题在于它将所有 4 个删除字段标记为“1”。关于如何让单个高效查询像上面的 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
作为列名...这只会造成困惑...
关于mysql - 将两个查询合并为同一个表中的一个(相同列/不同行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9115590/