我正在MySQL 数据库上使用sequelize。我正在获取一张表上的所有记录,同时将其与另一张表连接起来。如果不满足连接表上的 WHERE
条件,我尝试不包含结果。在 WHERE
子句中,我尝试将主表中的值与连接表进行比较,但它不起作用:
const expiredMemberships = await Membership.findAll({
include: [
{
model: User,
attributes: ['id'],
include: [
{
model: Post,
required: true,
attributes: ['id', 'created'],
where: {
created: {
[Op.gt]: '$Membership.created$',
},
},
},
],
},
],
attributes: ['id', 'created'],
where: {
isActive: true,
},
});
它创建以下查询:
SELECT `Membership`.`id`,
`Membership`.`created`,
`user`.`id` AS `user.id`,
`user->posts`.`id` AS `user.posts.id`,
`user->posts`.`created` AS `user.posts.created`
FROM `membership` AS `Membership`
LEFT OUTER JOIN ( `user` AS `user` INNER JOIN `post` AS `user->posts`
ON `user`.`id` = `user->posts`.`user_id`
AND `user->posts`.`created` > 'Invalid date' )
ON `Membership`.`user_id` = `user`.`id`
AND (`user`.`deleted` = '9999-12-31 23:59:59')
WHERE `Membership`.`is_active` = true;
您可以看到它显示'$Membership.created$'
为无效日期
。在 where 子句中使用连接表的列值的正确方法是什么?
最佳答案
您可以使用别名为成员(member)表的创建字段执行类似的操作,例如membership_created
const expiredMemberships = await Membership.findAll({
include: [
{
model: User,
attributes: ['id'],
include: [
{
model: Post,
required: true,
attributes: ['id', 'created'],
where: {
created: {
[Op.gt]: 'membership_created',
},
},
},
],
},
],
attributes: ['id', ['created', 'membership_created']],
where: {
isActive: true,
},
});
关于mysql - 使用sequelize,在where子句中使用连接表的列值的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56589532/