根据条件更新表的多列

时间:2019-11-06 11:31:11

标签: database

我想根据特定条件更新表的多个列。 有什么解决方案可以在单个查询中进行更新

我要在不同的条件下更新每列,这会导致更高的费用

-Custom0

  IF(xoldcustom0     = xnewcustom0) THEN
      UPDATE table_name
      SET custom0=xxoldcustom0copy
      WHERE id        =column_id
   END IF;

-Custom1

   IF(xoldcustom1     = xnewcustom1) THEN
      UPDATE table_name
      SET custom1=xxoldcustom1copy
      WHERE id        =column_id
   END IF;

我们可以根据条件在单个查询中更新以上代码

2 个答案:

答案 0 :(得分:0)

对于每个属性,您都可以摆脱if语句:

更新表名 SET custom1 = xxoldcustom1copy id = column_id和xoldcustom1 = xnewcustom1

但是我无法避免对每个属性/条件使用不同的语句。

答案 1 :(得分:0)

RDBMS是否支持WITH子句(公用表表达式,请参见https://www.essentialsql.com/introduction-common-table-expressions-ctes/)?

然后您可以尝试:

使用temptab(id,custom0,custom1,...)

AS

(SELECT table_name.id,xxoldcustom0copy,table_name.custom1,.... FROM table_name

其中table_name.xoldcustom0 = xnewcustom0和table_name.id = column_id

UNION

选择table_name.id,table_name.custim0,xxoldcustom1copy,...。FROM table_name

其中table_name.xoldcustom1 = xnewcustom1和table_name.id = column_id

UNION

...

更新表名 设置custom0 = temptab.custom0 设置custom1 = temptab.custom1 ... 在哪里id = temptab.id;

MariaDB似乎不支持此语法,因此我无法测试该语句。