gpt4 book ai didi

mysql - Sequelize 可以处理与一个表关联的多个键吗?

转载 作者:行者123 更新时间:2023-11-29 02:11:25 25 4
gpt4 key购买 nike

假设我有一个名为 Table1 的表。有 3 个业务 ID 关联到一个业务表。

Table1
---------
idBusiness1, idBusiness2, idBusiness3, etc.

Business
---------
idBusiness, Name

有没有办法关联上面的两个表来创建一个 Sequelize 查询(而不是原始查询)来拉回所有 3 个企业的名称?

SQL 看起来像这样:

SELECT 
t1.id, B1.Name AS 'Business1', B2.Name AS 'Business2'
FROM
Table1 t1
LEFT OUTER JOIN
Business b1 ON idBusiness1 = b1.idBusiness
LEFT OUTER JOIN
Business b2 ON idBusiness2 = b2.idBusiness
;

最佳答案

如果您的意思是表 1 包含一个字段 idBusiness 以及 idBusiness1、idBusiness2、idBusiness3、...值,那么您希望以 SQL 格式实现的是

db.seq.query('
SELECT * FROM Business
INNER JOIN Table1 ON Table1.idBusiness = Business.idBusiness ').success(function(rows) {
res.json(rows);
});

使用 ORM 格式,您可以通过 include 参数使用预加载:

Table1.findAll({
include: [{
model: Business,
required: true
}]
}).then(results => {
/* ... */
}.);

如果你的意思是你有 3 个不同的字段,并且想要获得 id 至少等于其中一个的业务名称:

SELECT * from Business
INNER JOIN Table1 ON Business.idBusiness IN (Table1.idBusiness1, Table1.idBusiness2, Table1.idBusiness3)

在ORM格式中,我能想到的最简单的方法是

Business.findAll({
where: { id: list }
}

您可以通过 findAll 查询从 Table1 中获取所有 ID,并将结果转换为所有这些 ID 的数组。我猜 Table1.findAll{} 的结果格式是

 [{idBusiness1: 1, idBusiness2: 2, idBusiness3: 3}, {idBusiness1: 42, idBusiness2: 32, idBusiness: 70}]

因此,使用一些代码,您可以遍历此列表以形成另一个

finalList = [];
list.forEach((item) => {
finalList.push(item.idBusiness1)
finalList.push(item.idBusiness2)
finalList.push(item.idBusiness3)
}

如果 Table1 中的字段超过 3 个,则可以迭代 Javascript 对象的属性以概括这 3 个推送。让我知道是否是这种情况,您需要帮助。

更新:

自 OP 澄清后,在查询中设置 required:false 会将内连接变为左(外)连接。

当您添加 where 选项时,它会自动将 required 设置为 true,从而将连接变成内部连接。请参阅参数 options.include[].where 的说明 http://docs.sequelizejs.com/class/lib/model.js~Model.html#findalloptions-promisearrayinstance .

在 Sequelize 语法中似乎不可能在同一张表上进行连接,您将包含与调用查找的表相同的表。这就是 Sequelize 在这些特定情况下支持原始查询的原因......

关于mysql - Sequelize 可以处理与一个表关联的多个键吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51502238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com