在Mysql中可变地设置列

在Mysql中可变地设置列,mysql,sql,syntax,Mysql,Sql,Syntax,执行以下操作的语法是什么: INSERT INTO table SET IF *expression* column1 = 'value1' ELSE column2 = 'value2' 您将使用insert。使用案例语句选择: INSERT INTO table(column1, column2) select (case when *expression* then 'value1' end) as column1, (case when not *exp

执行以下操作的语法是什么:

INSERT INTO table
SET 
IF *expression*
column1 = 'value1'
ELSE
column2 = 'value2'

您将使用
insert。使用
案例
语句选择

INSERT INTO table(column1, column2)
    select (case when *expression* then 'value1' end) as column1,
           (case when not *expression* then 'value2' end) as column2;
但是,我怀疑您可能真的想要
更新
,而不是
插入

update table
    set column1 = (case when *expression* then 'value1' else column1 end),
        column2 = (case when not *expression* then 'value2' else column2 end);

解释您试图实现的目标这是
IF
的存储过程表示法。不能在语句中使用它。虽然它可以工作,但同一表达式必须求值两次。有没有办法避免这种行为(出于性能原因)?@user2180613。除非表达式包含一个子查询,否则不应出现多次求值的问题。如果有,我会要求您使用查询、样本数据和预期结果修改您的问题。
插入
/
更新
操作的成本要高得多。评估可能很简单,但将在数百万行上执行。