首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在同一列上选择多个条件并与其他表连接

在同一列上选择多个条件并与其他表连接
EN

Stack Overflow用户
提问于 2022-08-07 18:55:14
回答 1查看 49关注 0票数 -2

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

证书表

雇员证书

代码语言:javascript
复制
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

不返回任何,但当我使用

代码语言:javascript
复制
WHERE c.id IN (9,10)

返回雇员 206,207,208

因为他们有这些证书。

但我想要的是那些同时拥有BSCS和MSCS证书的员工。

使用此查询,我可以使用证书id 9和10获得结果。但是我如何加入用户来获取用户的详细信息。

代码语言:javascript
复制
Select certificate_id
from
(
Select distinct user_id, certificate_id
from
employee_certificates
where certificate_id in (9,10)
) a

group by certificate_id

我尝试了这个查询,但是得到了微妙的结果。

代码语言:javascript
复制
 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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-07 19:54:24

代码语言:javascript
复制
   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):

代码语言:javascript
复制
   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;

根据要检查的证书数量调整拥有条件。

干杯

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73270223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档