【问题标题】:Use if statement update table使用 if 语句更新表
【发布时间】:2012-12-12 11:49:11
【问题描述】:

我正在尝试使用此命令通过 IF 语句更新saving.balance

UPDATE TABLE saving s, time t
SET s.balance = IF(t.currency_TYPE = ‘RMB’, s.balance + t.balance * t.interest)
WHERE t.ID = 'input'
AND s.User = t.User;

但是,MySQL 给了我ERROR 1064,出了什么问题以及如何纠正它?

【问题讨论】:

标签: mysql


【解决方案1】:

您忘记了 IF 函数中的第三个参数和其他语法内容 :-)

为什么你让你的脚本不在哪里?像这样:

UPDATE saving s
INNER JOIN time t
    ON t.ID = 'input'
    AND t.User = s.User
SET s.balance = s.balance + t.balance * t.interest
WHERE t.currency_TYPE = 'RMB';

您将只更新带有currency_type rmb 的记录!

UPDATE saving s
INNER JOIN time t
    ON t.ID = 'input'
    AND t.User = s.User
SET s.balance = (t.currency_TYPE = 'RMB', s.balance + t.balance * t.interest, 0);

【讨论】:

    【解决方案2】:

    试试这个:

    UPDATE saving s
    INNER JOIN `time` t ON s.`User` = t.`User`
    SET s.balance = CASE 
                      WHEN t.currency_TYPE = 'RMB' THEN s.balance + 
                                                        t.balance * t.interest
                      ELSE s.balance -- Don't forgot this, default is NULL
                    END
    WHERE t.ID = 'input';
    

    或者:

    UPDATE saving s
    INNER JOIN `time` t ON s.`User` = t.`User`
    SET s.balance = s.balance + t.balance * t.interest
    WHERE t.ID = 'input'
      AND t.currency_TYPE = 'RMB' ;
    

    【讨论】:

      【解决方案3】:

      else部分需要提一下

      UPDATE TABLE saving s, time t
      SET s.balance = IF(t.currency_TYPE = ‘RMB’, s.balance + t.balance * t.interest , 0)
      WHERE t.ID = 'input'
      AND s.User = t.User;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-25
        • 2015-05-09
        • 2012-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-30
        • 1970-01-01
        相关资源
        最近更新 更多