我想根据特定条件更新表的多个列。 有什么解决方案可以在单个查询中进行更新
我要在不同的条件下更新每列,这会导致更高的费用
-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;
我们可以根据条件在单个查询中更新以上代码
答案 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似乎不支持此语法,因此我无法测试该语句。