我有一个非常大的问题,我试图优化。
它是INSERT INTO ... ON DUPLICATE KEY UPDATE
。
但是,我只需要在某些条件下更新该行。由于我知道您无法WHERE
使用ON DUPLICATE KEY UPDATE
,因此我使用IF
。
但我需要根据完全相同的条件更新两列。问题是条件很长。它是column1
IN(大量加入选择)。拥有它两次并不是正确的。我会创建一个临时表,但由于这只需要UPDATE
部分而不是INSERT
部分,这会在某些情况下创建不必要的工作。
我的问题是:
如何根据ON中的单个条件更新多个列 DUPLICATE KEY UPDATE。
答案 0 :(得分:0)
根据this文档,您可以更新更多列
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3
答案 1 :(得分:0)
update
语句可以引用from
insert . . . select
子句中的值。我们的想法是获取您的查询并使其成为子查询。然后再添加一列作为计算列。您可以在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);
当然,您可以摆脱子查询(它有自己的开销),但这是您描述中最常用的方法。