天模型:
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/