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

标签 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

是否有办法将这 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'

您正在更新不需要以这种方式进行的列,但您只执行一次更新,而不是像多个查询那样执行多次更新。

我不喜欢使用 fromto 作为列名...这只会造成困惑...

关于mysql - 将两个查询合并为同一个表中的一个(相同列/不同行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9115590/

相关文章:

mysql - golang 在一周的特定日子(即每个星期五)采取行动

MYSQL 触发器使用 case 语句设置日期时间值

python - 如何使用 Python 从 JSON 响应中删除表情符号代码?

mysql - 通过加入多个表来计算

php - 遍历 mysql 结果并在解析为 json 之前将函数应用于每一行

mysql - 根据 int 值是否为 NULL 为其赋予文本标签(SQL)

mysql - SQL中按天按位置计数?

mysql - Redis 用于语义 Web 应用程序 RDF quads 和 SparQL

mysql - 按数据库计算的内容分组

php - 滚动平均效率,php mysql