MariaDB中无效使用组函数错误-更新查询和SUM

时间:2018-11-06 15:55:14

标签: sql reactjs mariadb

因此,我试图编写一个更新查询,该查询将根据用户的签证或万事达卡来更新其资金。 如果当前余额和想要提取的金额小于10.000,则我要声明的内容以及导致错误的原因是要更新总和。如果不是这种情况,并且签证余额变得小于0,则会造成人为的错误,这样我以后就可以使用它来将用户重定向到错误页面(我知道这不是大多数PC方式)。 代码是这样的:

const connection = require('../models/loginrouters');

function takeMoney(amount, cardnumber) {
  // prettier-ignore
  console.log("db cardnumber is".cardnumber)
  console.log('db amount is', amount);
  connection.query(
    "UPDATE users.usercards SET Balance = CASE WHEN type = 'visa' AND balance>'" +
      amount +
      "' THEN Balance - '" +
      amount +
      "' ELSE CASE WHEN type='mastercard' AND SUM(balance - '" +
      amount +
      "')<'-10000' THEN Balance - '" +
      amount +
      "' ELSE 'NEIN CASH' END END WHERE CardNumber = '" +
      cardnumber +
      "';",
    function(err) {
      if (err) {
        console.log('You too poor');
        console.log(err);
      } else {
        console.log('You got the cash');
      }
    }
  );
}

module.exports = takeMoney;

运行此查询时,出现以下错误: 错误:ER_INVALID_GROUP_FUNC_USE:组功能的无效使用

查询以以下形式发布给我:

sql: 'UPDATE users.usercards SET Balance =
         CASE WHEN type = \'visa\' AND balance>\'1000\'
                  THEN Balance - \'1000\'
              ELSE
              CASE WHEN type=\'mastercard\' AND SUM(balance - \'1000\')<\'-10000\'
                      THEN Balance - \'1000\'
                  ELSE \'NEIN CASH\'
              END
          END
      WHERE CardNumber = \'123456\';'

预先,谢谢您的回复!

1 个答案:

答案 0 :(得分:0)

因此,正如Gordon Linoff在评论中所述,我无法在更新查询中使用SUM。我只是将其包装在()中,所以效果很好。 TLDR;不要在更新查询中使用SUM。

  connection.query(
    "UPDATE users.usercards SET Balance = CASE WHEN type = 'visa' AND balance>'" +
      amount +
      "' THEN Balance - '" +
      amount +
      "' ELSE CASE WHEN type='mastercard' AND (balance - '" +
      amount +
      "')>'-10000' THEN Balance - '" +
      amount +
      "' ELSE 'NEIN CASH' END END WHERE CardNumber = '" +
      cardnumber +
      "';",
    function(err) {
      if (err) {
        console.log('You too poor');
      } else {
        console.log('You got the cash');
      }
    }
  );
}