У меня есть две таблицы, следовательно, модели и ассоциации определили их следующим образом.
assigned_jobs
------------------------
id | job_id | emp_id
1 | 1 | 5
2 | 2 | 6
3 | 3 | 3
4 | 4 | 2
matched_technicians
------------------------
id | job_id | emp_id
1 | 1 | 5
2 | 1 | 6
3 | 3 | 3
4 | 3 | 2
5 | 4 | 5
6 | 4 | 6
7 | 3 | 3
8 | 3 | 2
8 | 5 | 2
Таким образом, существует несколько заданий с одинаковым идентификатором в matched_technicians
, но только запись для job_id
в assigned_job
AssignedJob.hasMany(models.MatchedTechnicians, { sourceKey: 'job_id', foreignKey: 'job_id' })
MatchedTechnicians.hasOne(models.AssignedJob, { sourceKey: 'job_id', foreignKey: 'job_id' })
Я хочу получить все эти записи от matched_technicians
, у которого нет записей для этого job_id
в assigned_jobs
.
Я пытаюсь что-то ниже.
let alreadyMatchedJobs = await MatchedTechnician.findAll({
include: {
model: AssignedJob,
required: false,
attributes: ['job_id'],
},
group: ['job_id'],
attributes: ['job_id', 'id'],
});
Здесь я оставляю соединение matched_technicians
с assigned_jobs
и получение результата с GROUP BY job_id
Это генерирует следующий запрос.
SELECT `MatchedTechnician`.`job_id`, `MatchedTechnician`.`id`, `AssignedJob`.`id` AS `AssignedJob.id`, `AssignedJob`.`job_id` AS `AssignedJob.job_id`
FROM `matched_technicians` AS `MatchedTechnician`
LEFT OUTER
JOIN `assigned_jobs` AS `AssignedJob` ON `MatchedTechnician`.`job_id`
= `AssignedJob`.`job_id`
GROUP BY `job_id`;
Дать результат, как показано ниже.
[
{
"job_id": 1,
"id": 144,
"AssignedJob": {
"job_id": 1
}
},
{
"job_id": 2,
"id": 145,
"AssignedJob": {
"job_id": 2
}
},
{
"job_id": 3,
"id": 3,
"AssignedJob": {
"job_id": 3
}
},
{
"job_id": 4,
"id": 2,
"AssignedJob": {
"job_id": 4
}
},
{
"job_id": 5,
"id": 151,
"AssignedJob": null
}
]
Здесь я не понимаю, почему он дает записи с job_id
в обеих таблицах.
Я хочу здесь только запись с job_id, 5
.