[英]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.