Javascript Sequelize查询从表中选择*只返回一行
我目前正在使用PostgreSQL和Sequelize.js查询一些数据。当我使用sequelize.query()时,它只返回一行数据,但当我通过pgAdmin输入数据时,它会按预期工作 下面是我在sequelize.query()中使用的代码 这是nodejs代码Javascript Sequelize查询从表中选择*只返回一行,javascript,sql,node.js,postgresql,sequelize.js,Javascript,Sql,Node.js,Postgresql,Sequelize.js,我目前正在使用PostgreSQL和Sequelize.js查询一些数据。当我使用sequelize.query()时,它只返回一行数据,但当我通过pgAdmin输入数据时,它会按预期工作 下面是我在sequelize.query()中使用的代码 这是nodejs代码 const getRank = (option, logs = {}) => new Promise(async (resolve, reject) => { try { let { offset, lim
const getRank = (option, logs = {}) => new Promise(async (resolve, reject) => {
try {
let { offset, limit } = option;
if (!limit) limit = 10;
const result = await sequelize.query(
`SELECT table2.student_id,
s.canvasser_name,
l.level_name,
table2.total_score
FROM (SELECT table1.student_id,
sum(table1.max_score) total_score
FROM (SELECT sq.student_id,
max(sq.score) max_score
FROM public.student_quiz sq
GROUP BY sq.quiz_id, sq.student_id) table1
GROUP BY table1.student_id) table2
INNER JOIN public.student s
ON s.id = table2.student_id
INNER JOIN public.level l
ON l.id = s.level_id
ORDER BY table2.total_score DESC
LIMIT 10;`,
{ plain: true }
);
return resolve(result);
} catch (error) {
let customErr = error;
if (!error.code) customErr = Helpers.customErrCode(error, null, undefinedError);
logger.error(logs);
return reject(customErr);
}
});
下面是使用上述函数的代码
const getRankController = async (req, res) => {
try {
const { offset, limit } = req.query;
const result = await getRank({ offset, limit });
if (result.length < 1) {
return Helpers.response(res, {
success: false,
message: 'cannot get score list'
}, 404);
}
return Helpers.response(res, {
success: true,
result
});
} catch (error) {
return Helpers.error(res, error);
}
};
这一个不起作用,因为它是嵌套函数,我不知道如何复制它
我试着做一些简单的查询,比如SELECT*FROM table,它返回一行,然后我发现我需要在表名中添加“public”,这样它就变成了SELECT*FROM public.table,结果就成功了。在我尝试第二个代码块中的代码之前
任何回答或建议都将不胜感激,谢谢。我想您需要指出一种查询类型,并删除如下
plain:true
选项:
const result = await sequelize.query(
`SELECT table2.student_id,
s.canvasser_name,
l.level_name,
table2.total_score
FROM (SELECT table1.student_id,
sum(table1.max_score) total_score
FROM (SELECT sq.student_id,
max(sq.score) max_score
FROM public.student_quiz sq
GROUP BY sq.quiz_id, sq.student_id) table1
GROUP BY table1.student_id) table2
INNER JOIN public.student s
ON s.id = table2.student_id
INNER JOIN public.level l
ON l.id = s.level_id
ORDER BY table2.total_score DESC
LIMIT 10;`,
{
type: Sequelize.QueryTypes.SELECT
}
);
从Sequelize文档:
options.plain - Sets the query type to SELECT and return a single row
似乎您的表位于
Public
schema中,因此它在您选择带有schema的表时起作用name@JimMacaulay我明白了,你知道为什么它只返回一行吗。我的意思是,如果它不返回任何值,我就会得到它,但为什么它只返回一个呢?也许问题出在sequelize代码中。把它添加到问题中是个好主意。@bjarniranarsson打得好,我已经更新了。请看一看。您是否尝试在返回解析(结果)处设置断点代码>然后看什么是结果
内容?添加了它,这里仍然没有运气。伙计,你不会相信我一直在寻找这个答案。非常感谢你,你是最棒的。
const result = await sequelize.query(
`SELECT table2.student_id,
s.canvasser_name,
l.level_name,
table2.total_score
FROM (SELECT table1.student_id,
sum(table1.max_score) total_score
FROM (SELECT sq.student_id,
max(sq.score) max_score
FROM public.student_quiz sq
GROUP BY sq.quiz_id, sq.student_id) table1
GROUP BY table1.student_id) table2
INNER JOIN public.student s
ON s.id = table2.student_id
INNER JOIN public.level l
ON l.id = s.level_id
ORDER BY table2.total_score DESC
LIMIT 10;`,
{
type: Sequelize.QueryTypes.SELECT
}
);
options.plain - Sets the query type to SELECT and return a single row