【发布时间】:2022-01-05 09:43:32
【问题描述】:
我最近开始使用Sequelize 6。当前尝试表达以下查询失败。
SELECT u.*
FROM users u
JOIN requests r
ON u.id = r.user_id
WHERE (r.status = true AND r.created_at IN (SELECT
MAX(r.created_at)
FROM users u
INNER JOIN requests r ON r.user_id = u.id
GROUP BY u.id))
GROUP BY u.id, r.id
到目前为止我所尝试的:
const result = await User.findAll({
offset: page,
subQuery: false,
limit: rowsPerPage,
where: {
'$requests.status$': true,
},
include: [{
as: 'requests',
model: Request,
separate: true,
required: true,
order: [['createdAt', 'desc']],
limit: 1, // problem is here -> error: missing FROM-clause entry for table "requests"
}],
});
换句话说,我试图仅在关联的status 值在最后一条记录上为真时加载父模型,并返回每个单独的用户与其最新的协会并排。
关于我评论的限制问题,这个帖子可能有用
【问题讨论】:
-
看起来您的原始查询与您在 Sequelize 中尝试执行的操作不太匹配。你能仔细检查你的原始查询吗?在您的数据库上尝试一下,看看您是否得到了您期望的结果。对我来说,查询看起来只返回 1 条仅包含用户数据的记录。 (带有单个 created_at 时间戳 + 选择的内部连接只有 u.*)
-
@Emma 你是绝对正确的。我今天正在研究它,我遇到了你描述的情况。我已经更新了我的查询:)
标签: sql node.js postgresql sequelize.js postgresql-9.5