簡體   English   中英

在 Sequelize 中使用 @variables MySQL

[英]Using @variables MySQL in Sequelize

我正在嘗試使用 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

已解決 05/17/2019 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

我發現您還可以通過將每個 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中進行了測試,我不確定它是否會在以后的版本中發生變化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM