📅  最后修改于: 2023-12-03 15:34:56.447000             🧑  作者: Mango
在 Sequelize 中,Inner Join 常用于将两个数据表中互相关联的数据合并到一起。
Inner Join 包括两张表格的数据集合,并只返回两个表格中有匹配的数据行。
Sequelize 内置了 Inner Join 方法,以下是基本语法:
Model1.findAll({
include: [{
model: Model2,
where: { /* Model2 的查询条件 */ },
attributes: [[sequelize.fn('COUNT', sequelize.col('title')), 'count']],
duplicating: false
}]
})
其中,Model1
表示第一张数据表,Model2
表示第二张数据表。
where
属性用于指定 Model2 的查询条件。
attributes
属性用于指定需要查询的字段。
假设我们有两张数据表,分别是 Users
和 Orders
。 Users
表中存储了用户的基本信息,Orders
表中存储了用户的订单信息。我们需要通过 Inner Join 将这两个数据集合合并到一起,具体操作如下:
const Users = sequelize.define('users', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
name: {
type: Sequelize.STRING,
allowNull: false
},
age: {
type: Sequelize.INTEGER,
allowNull: false
}
})
const Orders = sequelize.define('orders', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
user_id: {
type: Sequelize.INTEGER,
allowNull: false
},
products: {
type: Sequelize.STRING,
allowNull: false
},
amount: {
type: Sequelize.INTEGER,
allowNull: false
}
})
Users.hasMany(Orders, { foreignKey: 'user_id' }) // 在 User 表中加入外键
async function getUsersWithOrders() {
const usersWithOrders = await Users.findAll({
include: Orders
})
console.log(JSON.stringify(usersWithOrders, null, 4))
}
getUsersWithOrders()
上述代码使用 Sequelize Inner Join 实现了 Users
和 Orders
数据表的合并。我们通过在 Users
表上加入外键 user_id
,然后使用 include
将 Orders
表合并到查询结果中。最后,我们使用 JSON.stringify
方法在控制台输出了查询结果。
Sequelize Inner Join 广泛应用于将多个表的数据合并到一起的场景中。通过使用 Inner Join,我们可以轻松地在查询多个表中的数据且避免数据冗余。这种做法对于数据的查询与检索都提供了非常便捷的方式。