我正在尝试编写一个序列化函数,它看起来像下面的SQL代码:
SELECT * from events INNER JOIN corrections on events.correctionId
= correction.id WHERE events.failureId = 1234 OR
corrections.failureId = 1234基本上,我有一个外键为failureId和correctionId的表(events)。校正表还具有失败表的外键。我需要事件中failureId等于某个特定数字的所有行,以及纠正表中failureId等于该数字的所有行。
我遇到问题的部分是引用由内连接产生的corrections.failureId列。我尝试了一大堆变体,但都不起作用。这是我到目前为止所知道的:
Event.findAll({
include: [correction],
where: { [sequelize.Op.or]: [{ failID }, {????}] }发布于 2019-03-26 04:36:31
1)您可以使用顶级where将查询从ON where (http://docs.sequelizejs.com/manual/models-usage.html#top-level-where-with-eagerly-loaded-models)移动到主where查询
Event.findAll({
include: [correction],
where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})2)默认情况下sequelize将使用LEFT OUTER JOIN。要更改此行为,您需要传递required以包含以下内容:
Event.findAll({
include: [{ model: correction, required: true }],
where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})或者只将where语句添加到包含的模型中,如下所示:
Event.findAll({
include: [{ model: correction, where: {...} }],
where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})因此,在您的示例中,您需要:
Event.findAll({
include: [{ model: correction, required: true }],
where: { [sequelize.Op.or]: [{ failureId }, { '$correction.failureId$': failureId }] }] }
})https://stackoverflow.com/questions/55345651
复制相似问题