试图获得一份具有特定证书集的员工名单,例如BSCS和MSCS证书。
证书表

雇员证书

SELECT * FROM users AS u
JOIN employee_certificates e ON e.user_id = u.id
JOIN certificates c ON e.certificate_id = c.id
WHERE c.id = 9 AND c.id=10不返回任何,但当我使用
WHERE c.id IN (9,10)返回雇员 206,207,208
因为他们有这些证书。
但我想要的是那些同时拥有BSCS和MSCS证书的员工。
使用此查询,我可以使用证书id 9和10获得结果。但是我如何加入用户来获取用户的详细信息。
Select certificate_id
from
(
Select distinct user_id, certificate_id
from
employee_certificates
where certificate_id in (9,10)
) a
group by certificate_id我尝试了这个查询,但是得到了微妙的结果。
Select certificate_id,a.name
from
(
Select distinct user_id, certificate_id,u.name
from
employee_certificates
JOIN users u ON u.id = employee_certificates.user_id
where certificate_id in (9,10)
) a
group by certificate_id,a.name

什么是正确的结果我例外?返回的只有一个用户的user_id是206有两个证书(9,10)
发布于 2022-08-07 19:54:24
SELECT u.*
FROM employee_certificates ec
JOIN users u ON u.id = ec.user_id
WHERE ec.certificate_id IN (9, 10)
GROUP BY ec.user_id
HAVING COUNT(ec.user_id) = 2;如果同一证书允许多次使用(谢谢matbailie):
SELECT u.*
FROM employee_certificates ec
JOIN users u ON u.id = ec.user_id
WHERE ec.certificate_id IN (9, 10)
GROUP BY ec.user_id
HAVING COUNT(DISTINCT ec.certificate_id) = 2;根据要检查的证书数量调整拥有条件。
干杯
https://stackoverflow.com/questions/73270223
复制相似问题