node.js - 在js查询字符串中使用SQL变量

时间:2014-08-26 13:15:26

标签: javascript mysql sql node.js sequelize.js

所以,我从表中选择条目并对它们进行分组,但也希望在结果中创建索引列。在MySQL Workbench中执行此查询可以正常工作,但是当我尝试在node.js服务器上执行它时,会出现一个解析错误,并且mysql表示语法不正确。

我正在使用原始查询和来自 sequelize QueryChainer

SET @cnt = 0;
SELECT (@cnt := @cnt + 1) AS id, et.fileName, et.creationDate,
  SUM(COALESCE(et.amountExported, 0)) AS sumExported, 
  SUM(COALESCE(et.amountImported, 0)) AS sumImported,
  (SUM(COALESCE(et.amountExported, 0)) - SUM(COALESCE(et.amountImported, 0))) AS difference
FROM exported_transactions AS et
WHERE (et.creationDate BETWEEN ? AND ?) /* ? is replaced by a date string */
GROUP BY et.fileName

删除sql查询中的变量并在node.js服务器上执行它可以正常工作:

SELECT et.fileName, et.creationDate,
  SUM(COALESCE(et.amountExported, 0)) AS sumExported, 
  SUM(COALESCE(et.amountImported, 0)) AS sumImported,
  (SUM(COALESCE(et.amountExported, 0)) - SUM(COALESCE(et.amountImported, 0))) AS difference
FROM exported_transactions AS et
WHERE (et.creationDate BETWEEN ? AND ?) /* ? is replaced by a date string */
GROUP BY et.fileName

当然,我可以在没有“id”列的情况下做得很好,但我想在那里进行排序。是否有我的问题的解决方案或是否有其他方法来生成此自动递增列?

1 个答案:

答案 0 :(得分:1)

您是否在数据库设置对象中设置了multipleStatements:true?

如果没有,请记住,对于多个语句,数据库查询将结果数组(而不是单个结果对象)传递给查询的回调。 " SET"语句将在结果[0]中拥有自己的结果对象,即使它没有返回任何有趣的数据。