将两个查询合并到同一个表中的一个(相同列/不同行)

时间:2012-02-02 16:04:48

标签: mysql

对于邮件系统,我正在尝试为员工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个查询一样运行的任何想法?

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'

您需要更新不需要这样的列,但您只执行一次更新,而不是多次查询。

我不喜欢使用fromto作为列名...它只是要求混淆......

答案 1 :(得分:0)

如果您正在执行需要两个不同WHERE子句的更新,那么很遗憾,您将不得不执行两个查询。如果您担心性能问题,可以随时在一个TRANSACTION中批量处理。