作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个很大的查询要优化。
这是一个INSERT INTO ... ON DUPLICATE KEY UPDATE
。但是,我只需要在特定条件下更新线路。因为我知道您不能将 WHERE
与 ON DUPLICATE KEY UPDATE
一起使用,所以我使用 IF
。
但我需要根据完全相同的条件更新两列。问题是条件很长。它是 column1
IN(大量连接选择)。在那里吃两次似乎也不对。我会创建一个临时表,但由于这只在 UPDATE
部分而不是 INSERT
部分需要,因此在某些情况下会产生不必要的工作。
我的问题是:
How can I update multiple columns based on single condition in ON DUPLICATE KEY UPDATE.
最佳答案
update
语句可以引用 insert 的
。这个想法是接受您的查询并使其成为子查询。然后再添加一列,即您的计算列。您可以在 from
子句中的值。 . .选择set
子句中使用它:
insert into table(col1, . . .)
select . . .
from (select cols, . . .,
col1 in (complicated stuff here) as IsPresent
from . . .
) t
on duplicate key update colx = if(t.IsPresent, a, b), coly(if.tIsPresent, d, e);
当然,您可以摆脱子查询(它有自己的开销),但这是您描述的最通用的方法。
关于MySQL 根据单个 IF 更新多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22688751/
我是一名优秀的程序员,十分优秀!