【问题标题】:How to update multiple columns with different where clauses in mySQL如何在 mySQL 中使用不同的 where 子句更新多个列
【发布时间】:2015-03-13 19:39:56
【问题描述】:

我正在尝试更新表中的多个列,这些列都需要在单个查询中使用不同的 where 子句。我不擅长 sql,并且很难在 google 上找到帮助。我试图实现这样的目标

UPDATE $table 
SET meta_value = 'john',
    meta_value = 'v1234'
WHERE   meta_key = 'name' AND post_id=$post_id,
        meta_key = 'trak' AND post_id=$post_id"

这个想法是第一个 SET 匹配第一个 WHERE,第二个 SET 匹配第二个 WHERE 等等。理想情况下,我可以做很多这样的事情。知道如何实现这一目标吗?

【问题讨论】:

标签: mysql sql-update multiple-columns


【解决方案1】:
Update $table
set meta_value = CASE WHEN meta_key = 'name' then 'john'
                      WHEN meta_key = 'trak' then 'v1234' end
where post_Id = $post_ID 

【讨论】:

  • 没有 where 子句的性能不会很好。并且不确定它会对其他值产生什么影响。
  • 是否可以添加一个只有 id 的 where 子句,因为这里总是一样的?
  • 那要加在'end'后面吗?
  • 已更新,是的,并删除了不需要的多条件 case 语句
  • 非常感谢。有用!如果我有 50 个 WHEN/THEN 对,这会不会效率低下?
【解决方案2】:
UPDATE $table 
SET meta_value = IF(meta_key='name','john','v1234')
WHERE   post_id=$post_id AND
    meta_key IN ('trak','name')

【讨论】:

  • 这似乎可行,谢谢!你能解释一下吗。 IF 子句中的表达式究竟是什么意思?如果我更新 50 个不同的 meta_key,这对性能有何影响?
  • 啊。刚刚意识到这只有在只有 2 列时才有效。但我有 500 列想要一次性更新
  • 真的吗? 500 ?那么你的架构需要修复。
  • 原本应该是 50 个值而不是 500 列的 ups,抱歉
猜你喜欢
  • 2021-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
相关资源
最近更新 更多