How to control the inner join query in sequelize using node.js?
Days model:
dayNumber: {
type: Sequelize.INTEGER,
primaryKey: true
},
dayDate: {
type: Sequelize.DATE
},
status: {
type: Sequelize.INTEGER
},
traineeId: {
type: Sequelize.INTEGER,
primaryKey: true
},
workoutId: {
type: Sequelize.INTEGER,
}
WorkoutsExercises model:
exercise_name: {
type: Sequelize.INTEGER,
primaryKey: true
},
workout_id: {
type: Sequelize.DATE,
primaryKey: true
},
coach_id: {
type: Sequelize.INTEGER,
primaryKey: true
}
I just want to make an inner join between the two tables to return all exercises in each day, I use the following
const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
And this function returns the following query:
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`.`dayNumber` = `workoutsExercises`.`workout_id`;
how can I change the on condition from (day
.dayNumber
) to (day
.workoutId
)
node.js join sequelize.js inner-join
add a comment |
Days model:
dayNumber: {
type: Sequelize.INTEGER,
primaryKey: true
},
dayDate: {
type: Sequelize.DATE
},
status: {
type: Sequelize.INTEGER
},
traineeId: {
type: Sequelize.INTEGER,
primaryKey: true
},
workoutId: {
type: Sequelize.INTEGER,
}
WorkoutsExercises model:
exercise_name: {
type: Sequelize.INTEGER,
primaryKey: true
},
workout_id: {
type: Sequelize.DATE,
primaryKey: true
},
coach_id: {
type: Sequelize.INTEGER,
primaryKey: true
}
I just want to make an inner join between the two tables to return all exercises in each day, I use the following
const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
And this function returns the following query:
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`.`dayNumber` = `workoutsExercises`.`workout_id`;
how can I change the on condition from (day
.dayNumber
) to (day
.workoutId
)
node.js join sequelize.js inner-join
add a comment |
Days model:
dayNumber: {
type: Sequelize.INTEGER,
primaryKey: true
},
dayDate: {
type: Sequelize.DATE
},
status: {
type: Sequelize.INTEGER
},
traineeId: {
type: Sequelize.INTEGER,
primaryKey: true
},
workoutId: {
type: Sequelize.INTEGER,
}
WorkoutsExercises model:
exercise_name: {
type: Sequelize.INTEGER,
primaryKey: true
},
workout_id: {
type: Sequelize.DATE,
primaryKey: true
},
coach_id: {
type: Sequelize.INTEGER,
primaryKey: true
}
I just want to make an inner join between the two tables to return all exercises in each day, I use the following
const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
And this function returns the following query:
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`.`dayNumber` = `workoutsExercises`.`workout_id`;
how can I change the on condition from (day
.dayNumber
) to (day
.workoutId
)
node.js join sequelize.js inner-join
Days model:
dayNumber: {
type: Sequelize.INTEGER,
primaryKey: true
},
dayDate: {
type: Sequelize.DATE
},
status: {
type: Sequelize.INTEGER
},
traineeId: {
type: Sequelize.INTEGER,
primaryKey: true
},
workoutId: {
type: Sequelize.INTEGER,
}
WorkoutsExercises model:
exercise_name: {
type: Sequelize.INTEGER,
primaryKey: true
},
workout_id: {
type: Sequelize.DATE,
primaryKey: true
},
coach_id: {
type: Sequelize.INTEGER,
primaryKey: true
}
I just want to make an inner join between the two tables to return all exercises in each day, I use the following
const Days = require('../models/days');
const WorkoutsExercises = require('../models/workoutsExercises');
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
And this function returns the following query:
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`.`dayNumber` = `workoutsExercises`.`workout_id`;
how can I change the on condition from (day
.dayNumber
) to (day
.workoutId
)
node.js join sequelize.js inner-join
node.js join sequelize.js inner-join
asked Nov 19 '18 at 19:37


Ebrahim AmerEbrahim Amer
337
337
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
The relation should be as the following
WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
the target key is what changes the ON clause, the query will be:
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
which gives:
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`;
add a comment |
If you have several relations between two models you can create several associations:
User.hasMany(Task);
Task.belongsTo(User);
User.hasMany(Task, {as: "secondAssociation", foreignKey, sourceKey});
Task.belongsTo(User, {as: "secondAssociation", foreignKey, targetKey});
And you can run this queries with different ON clause, determined by foreignKey (and sourceKey/targetKey) value, that you provide to create associations:
User.findAll({
include: [{
model: Task
}]
User.findAll({
include: [{
model: Task,
as: "secondAssociation"
}]
})
If you want change ON clause for given query, you can use
include.on
option of Model.findAll method.
User.findAll({
include: [{
model: Task,
on: {} //Use Sequelize.Op.col for reference on other column
}]
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381495%2fhow-to-control-the-inner-join-query-in-sequelize-using-node-js%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
The relation should be as the following
WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
the target key is what changes the ON clause, the query will be:
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
which gives:
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`;
add a comment |
The relation should be as the following
WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
the target key is what changes the ON clause, the query will be:
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
which gives:
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`;
add a comment |
The relation should be as the following
WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
the target key is what changes the ON clause, the query will be:
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
which gives:
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`;
The relation should be as the following
WorkoutExercises.hasMany(Day, {foreignKey: 'workout_id'})
Day.belongsTo(WorkoutExercises, {foreignKey: 'workout_id', targetKey: 'workout_id'})
the target key is what changes the ON clause, the query will be:
Days.findAll({
include: [{
model: WorkoutsExercises,
required: true
}]
})
which gives:
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`;
answered Dec 2 '18 at 20:22


Ebrahim AmerEbrahim Amer
337
337
add a comment |
add a comment |
If you have several relations between two models you can create several associations:
User.hasMany(Task);
Task.belongsTo(User);
User.hasMany(Task, {as: "secondAssociation", foreignKey, sourceKey});
Task.belongsTo(User, {as: "secondAssociation", foreignKey, targetKey});
And you can run this queries with different ON clause, determined by foreignKey (and sourceKey/targetKey) value, that you provide to create associations:
User.findAll({
include: [{
model: Task
}]
User.findAll({
include: [{
model: Task,
as: "secondAssociation"
}]
})
If you want change ON clause for given query, you can use
include.on
option of Model.findAll method.
User.findAll({
include: [{
model: Task,
on: {} //Use Sequelize.Op.col for reference on other column
}]
add a comment |
If you have several relations between two models you can create several associations:
User.hasMany(Task);
Task.belongsTo(User);
User.hasMany(Task, {as: "secondAssociation", foreignKey, sourceKey});
Task.belongsTo(User, {as: "secondAssociation", foreignKey, targetKey});
And you can run this queries with different ON clause, determined by foreignKey (and sourceKey/targetKey) value, that you provide to create associations:
User.findAll({
include: [{
model: Task
}]
User.findAll({
include: [{
model: Task,
as: "secondAssociation"
}]
})
If you want change ON clause for given query, you can use
include.on
option of Model.findAll method.
User.findAll({
include: [{
model: Task,
on: {} //Use Sequelize.Op.col for reference on other column
}]
add a comment |
If you have several relations between two models you can create several associations:
User.hasMany(Task);
Task.belongsTo(User);
User.hasMany(Task, {as: "secondAssociation", foreignKey, sourceKey});
Task.belongsTo(User, {as: "secondAssociation", foreignKey, targetKey});
And you can run this queries with different ON clause, determined by foreignKey (and sourceKey/targetKey) value, that you provide to create associations:
User.findAll({
include: [{
model: Task
}]
User.findAll({
include: [{
model: Task,
as: "secondAssociation"
}]
})
If you want change ON clause for given query, you can use
include.on
option of Model.findAll method.
User.findAll({
include: [{
model: Task,
on: {} //Use Sequelize.Op.col for reference on other column
}]
If you have several relations between two models you can create several associations:
User.hasMany(Task);
Task.belongsTo(User);
User.hasMany(Task, {as: "secondAssociation", foreignKey, sourceKey});
Task.belongsTo(User, {as: "secondAssociation", foreignKey, targetKey});
And you can run this queries with different ON clause, determined by foreignKey (and sourceKey/targetKey) value, that you provide to create associations:
User.findAll({
include: [{
model: Task
}]
User.findAll({
include: [{
model: Task,
as: "secondAssociation"
}]
})
If you want change ON clause for given query, you can use
include.on
option of Model.findAll method.
User.findAll({
include: [{
model: Task,
on: {} //Use Sequelize.Op.col for reference on other column
}]
answered Nov 30 '18 at 21:00
FarisFaris
1014
1014
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53381495%2fhow-to-control-the-inner-join-query-in-sequelize-using-node-js%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown