【问题标题】:Using @variables MySQL in Sequelize在 Sequelize 中使用 @variables MySQL
【发布时间】:2019-10-05 01:22:54
【问题描述】:

我正在尝试使用 SET 变量从 MySQL(Sequelize Raw Query)获取迭代器,如下所示:

SET @Variable:=0; SELECT @Variable:=@Variable+1 AS AddNewColumn

我的具体代码是:

SET @i = 0; SELECT @i:=@i+1 AS iterator, COUNT(ci.id) totalCases, ...

但是会抛出以下错误:

'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'SELECT\n @i:=@i+1 AS iterator,\n COUNT(ci.id) totalCases,\n SUM(b_p.amount\' at line 2',

有什么想法吗?

顺便说一句,我使用的是 MySQL 5.7:

mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    已于 2019 年 5 月 17 日 14:12 解决

    在我的原始查询中,我在 FROM 中分配 @rownum:=0,在声明之前定位表,如下所示:

    FROM (SELECT @rownum:=0) case_imports, case_imports ci

    一开始:

    SELECT (@rownum:=@rownum+1) AS id, COUNT(ci.id) totalCases,

    最后,按 id 排序:

    ORDER BY id

    【讨论】:

    • 我尝试运行,它运行但返回 0 个结果。当我尝试在 MySQLWorkbench 中运行原始查询时,它会返回数据。你有什么想法吗?
    • 您是否按照顺序(首先是 SELECT,然后是 FROM)?
    【解决方案2】:

    我发现您还可以通过将每个 SQL 语句(包括变量声明)分解为单独的查询来在 Sequelize 中使用变量:

    await sequelize.query('SET @i = 0;');
    const rows = await sequelize.query(
        'SELECT @i := @i + 1 AS iterator FROM someTable;',
        { type: sequelize.QueryTypes.SELECT },
    );
    

    或者如果您想使用交易:

    await sequelize.transaction(async (transaction) => {
        await sequelize.query('SET @rank = -1;', { transaction });
        const querySql = `
            UPDATE someTable
                SET rank = (@rank := @rank + 1)
                WHERE groupId = :groupId
                ORDER BY totalPoints DESC, age ASC;`;
        await sequelize.query(querySql, {
            transaction,
            replacements: { groupId },
        });
    });
    

    这是在sequelize@4.44.3 中测试的,我不确定它是否会在以后的版本中改变。

    【讨论】:

      猜你喜欢
      • 2019-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 2016-02-19
      • 1970-01-01
      相关资源
      最近更新 更多