我有两张表,其中一张表有另一张表的 ID。 1:1 关系。
所以像
EventFeedback
somePrimaryKey
userEventID
UserEvent
userEventID
Sequelize 的关系定义为
models.UserEvent.hasOne(models.EventFeedback, { foreignKey: 'userEventID' });
I need all entries in UserEvent
that do not have an entry in EventFeedback
, which is an exclusionary join.
Stealing images from this article https://www.codeproject.com/kb/database/visual_sql_joins.aspx because they have nice individual images:
他们甚至给出了示例代码!
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL
我如何在续集中做到这一点?
我只需要进行左连接并手动处理它吗?
你需要急切地加载EventFeedback
查询时UserEvent
并添加适当的where
条款。您还需要定义EventFeedback
结果中不需要,因此查询将生成LEFT JOIN
反而INNER JOIN
UserEvent.findAll({
include: [{
model: EventFeedback,
required: false, // do not generate INNER JOIN
attributes: [] // do not return any columns of the EventFeedback table
}],
where: sequelize.where(
sequelize.col('EventFeedback.userEventID'),
'IS',
null
)
}).then(userEvents => {
// user events...
});
在上面的代码中sequelize
是 Sequelize 的一个实例,其中定义了模型。您还可以参考文档sequelize.where() http://docs.sequelizejs.com/en/latest/api/sequelize/#whereattr-comparator-logic-sequelizewhere and sequelize.col() http://docs.sequelizejs.com/en/latest/api/sequelize/#colcol-sequelizecol方法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)