Sequelize关联查询:保留所有Ask记录且仅包含当前用户投票
解决方案
要实现返回所有Ask记录,同时仅关联当前用户的AsksVote数据(无投票的Ask对应的asksVotes字段为空数组),只需在include配置中添加required: false参数,将默认的**内连接(INNER JOIN)改为左外连接(LEFT OUTER JOIN)**即可。
修改后的查询代码
const userId = req.params.userId; Ask.findAll({ limit: 10, order: [ ['createdAt', 'DESC'], ], include: { model: AsksVote, where: { userId: userId }, required: false // 关键参数:保留所有Ask记录,无匹配关联时返回空数组 } }) .then( response => { return res.status(200).json(response); }) .catch( err => { return res.status(500).json(err); });
原理说明
- Sequelize中使用
include关联模型时,默认采用内连接,这会自动过滤掉没有匹配关联数据的主模型记录(也就是没有当前用户投票的Ask会被排除)。 - 设置
required: false后,关联查询变为左外连接,会保留所有主模型(Ask)的记录,当没有匹配的AsksVote数据时,对应的关联字段会返回空数组[],完全符合预期结果。
内容的提问来源于stack exchange,提问作者theRyanMark
相关产品推荐
相关产品推荐

