[英]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.