node.js - 如何使用node.js控制sequelize中的内连接查询?

标签 node.js join sequelize.js inner-join

天模型:

workoutId: {
    type: Sequelize.INTEGER,
},
traineeId: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
dayNumber: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
status: {
  type: Sequelize.INTEGER
},

锻炼练习模型:

workout_id: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
exercise_name: {
  type: Sequelize.INTEGER,
  primaryKey: true
},
coach_id: {
  type: Sequelize.INTEGER,
  primaryKey: true
}

我只是想在两个表之间进行内部联接以返回每天的所有练习,我使用以下内容

const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');

Days.findAll({
  include: [{
    model: WorkoutsExercises,
      required: true
   }]        
})

该函数返回以下查询:

SELECT
  `day`.`workoutId`,
  `day`.`dayNumber`,
  `day`.`status`,
  `day`.`traineeId`,
  
  `workoutsExercises`.`workout_id` AS `workoutsExercises.workout_id`, 
  `workoutsExercises`.`exercise_name` AS `workoutsExercises.exercise_name`, 
  `workoutsExercises`.`coach_id` AS `workoutsExercises.coach_id`

FROM `days` AS `day`

INNER JOIN `workoutsExercises` AS `workoutsExercises` 

ON `day`.`dayNumber` = `workoutsExercises`.`workout_id`; 

如何将开启条件从 (day.dayNumber) 更改为 (day.workoutId)

最佳答案

关系应如下

WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})

目标键是更改 ON 子句的内容,我们将使用相同的查询:

Days.findAll({
  include: [{
    model: WorkoutsExercises,
    required: true
  }]        
})

给出:

SELECT

  `day`.`dayNumber`,
  `day`.`dayDate`,
  `day`.`status`,
  `day`.`traineeId`, 
  `day`.`workoutId`, 

  `workoutsExercises`.`exercise_name` AS `workoutsExercises.exercise_name`,
  `workoutsExercises`.`workout_id` AS `workoutsExercises.workout_id`,
  `workoutsExercises`.`coach_id` AS `workoutsExercises.coach_id`
 
 FROM `days` AS `day`
 
 INNER JOIN `workoutsExercises` AS `workoutsExercises`
 
 ON `day`.`workout_id` = `workoutsExercises`.`workout_id`;

关于node.js - 如何使用node.js控制sequelize中的内连接查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53381495/

相关文章:

node.js - 收到错误 - 在 Windows 机器上监听 EADDRINUSE:::3000

R data.table 连接两个表并保留所有行

mysql - 使用 MySql 获取两个日期之间的事件

sequelize.js - 如何通过表属性删除?

node.js - a href 在 Express 中丢失 Jade 中的相对目录

node.js - Node JS TCP 代理 : Set up HTTP Tunnel using Node JS

sql-server - 如何让sequelize在其SQL语句中的Unicode字符串前加N?

postgresql - 几何类型从数据库中读取为字符串

ruby-on-rails - 如何运行 GenieACS?

python - pandas:在不同类型的列上连接两个数据框