MySQL基于单个IF更新多个列

时间:2014-03-27 13:12:40

标签: mysql conditional-statements multiple-columns

我有一个非常大的问题,我试图优化。

它是INSERT INTO ... ON DUPLICATE KEY UPDATE。 但是,我只需要在某些条件下更新该行。由于我知道您无法WHERE使用ON DUPLICATE KEY UPDATE,因此我使用IF

但我需要根据完全相同的条件更新两列。问题是条件很长。它是column1 IN(大量加入选择)。拥有它两次并不是正确的。我会创建一个临时表,但由于这只需要UPDATE部分而不是INSERT部分,这会在某些情况下创建不必要的工作。

我的问题是:

  

如何根据ON中的单个条件更新多个列   DUPLICATE KEY UPDATE。

2 个答案:

答案 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);

当然,您可以摆脱子查询(它有自己的开销),但这是您描述中最常用的方法。

相关问题