[英]Select record only if it contains same column value for all rows
我有一张如下表。
如果它被所有人拒绝,我只想要job_id
。
如果没有被所有人拒绝,我尝试使用group by
来计算结果。
所以,我会检查是否至少有一条记录仍然没有被拒绝。
但它会给我jobs not rejected by all
。
我想要那些rejected by all
工作的job_id
。
在上面的示例中,它应该给出job_id =2
的记录
const jobRejectedByAll = await MatchedTechnician.findAll({
where: {
is_rejected: false,
job_id: allMatchedJobs,
},
group: ['job_id'],
having: sequelize.literal(`count(job_id) > 1`),
});
询问:
SELECT job_id
,
FROM matched_technicians AS MatchedTechnician
WHERE MatchedTechnician.is_rejected = FALSE
AND MatchedTechnician.job_id IN (2, 3)
GROUP
BY job_id
HAVING COUNT(job_id) > 1;
您可以使用NOT EXISTS
查询来检查is_rejected
的值是否为false
:
SELECT DISTINCT job_id
FROM matched_technicians m1
WHERE NOT EXISTS (SELECT *
FROM matched_technicians m2
WHERE m2.job_id = m1.job_id
AND (m2.is_rejected = false
OR m2.is_rejected IS NULL)
)
Output:
job_id
2
另一种查询方式是计算给定job_id
的行数,并将其与true
值的数量进行比较; 如果它们相同,则作业已被拒绝:
SELECT job_id
FROM matched_technicians
GROUP BY job_id
HAVING COUNT(*) = SUM(is_rejected)
更新
第二种方法的续集版本:
const jobsRejectedByAllTechs = await MatchedTechnician.findAll({
group: ['job_id'],
having: Sequelize.literal('count(*) = SUM(is_rejected)'),
attributes: ['job_id'],
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.