【发布时间】:2016-02-04 06:54:52
【问题描述】:
我将 Node.js 与sails.js 一起使用
我正在尝试构建一个查询,其中包含这样的子查询:
SELECT
`id`, `col1`, `col2`, `col3`,
(SELECT COUNT(*) FROM `tablename`
WHERE (`col1` = 'someValue') AND (`col2` = `t`.`col2`)) AS `total`
FROM `tablename` `t`
WHERE `col1` = 'value2' AND `col3` = 'value3'
ORDER BY `total` ASC
我知道我可以在我的模型中写:
//./api/models/tablename.js
module.exports = {
...
functionName() {
this.query(aboveSQLQuery)
.then(found => {
doSomething();
})
.catch(err => {
handleError(err);
});
}
}
但我不想使用它,所以我找到了node-sql-query 模块,所以我可以像这样构建查询:
let
sql = require('sql-query'),
sqlQuery = sql.Query(),
sqlSelect = sqlQuery.select(),
subQuery = sqlSelect
.from('tablename')
.where({col1: "someValue"}, {__sql: [['col2 = t.col2']]})
.count()
.build(),
/* subQuery = "SELECT COUNT(*) FROM `tablename`
WHERE (`col1` = 'someValue') AND (`col2` = `t`.`col2`)"
*/
masterQuery = sqlSelect
.from('tablename')
.select(['id', 'col1', 'col2', 'col3', {a: "total", sql: subQuery}])
.where({col1: "value2", col3: "value3"})
.order('total', 'A')
.build();
/* masterQuery = "SELECT `id`, `col1`, `col2`, `col3`,
(SELECT COUNT(*) FROM `tablename`
WHERE (`col1` = 'someValue') AND (`col2` = `t`.`col2`))
AS `total`
FROM `tablename`
WHERE `col1` = 'value2' AND `col3` = 'value3'
ORDER BY `total` ASC"
*/
masterQuery 没有按预期工作,但如果我将第二个 FROM 从
FROM `tablename`
到
FROM `tablename` `t`
它有效。
任何帮助将不胜感激
【问题讨论】:
标签: mysql node.js subquery sails.js waterline