📜  sequelize inner join - Javascript (1)

📅  最后修改于: 2023-12-03 15:34:56.447000             🧑  作者: Mango

Sequelize Inner Join

在 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 属性用于指定需要查询的字段。

实例

假设我们有两张数据表,分别是 UsersOrdersUsers 表中存储了用户的基本信息,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 实现了 UsersOrders 数据表的合并。我们通过在 Users 表上加入外键 user_id,然后使用 includeOrders 表合并到查询结果中。最后,我们使用 JSON.stringify 方法在控制台输出了查询结果。

结论

Sequelize Inner Join 广泛应用于将多个表的数据合并到一起的场景中。通过使用 Inner Join,我们可以轻松地在查询多个表中的数据且避免数据冗余。这种做法对于数据的查询与检索都提供了非常便捷的方式。