查询同时担任Owner和CEO职位的员工所属公司及人员信息
同时担任CEO和Owner人员的查询方案
方法一:分组统计法
通过筛选目标职位记录,再按公司和人员分组,统计职位数量来确保同时拥有两个职位:
SELECT com.name AS 公司名称, per.name AS 人员姓名 FROM company_person AS cp INNER JOIN company AS com ON com.id = cp.company_id INNER JOIN person AS per ON per.id = cp.person_id INNER JOIN position AS pos ON pos.id = cp.position_id WHERE pos.position_name IN ('CEO', 'Owner') GROUP BY com.name, per.name HAVING COUNT(DISTINCT pos.position_name) = 2;
逻辑说明:
WHERE子句先过滤出职位为CEO或Owner的记录GROUP BY按公司名称和人员姓名分组,锁定同一个人在同一家公司的职位集合HAVING COUNT(DISTINCT pos.position_name) = 2确保该人员在这家公司下同时拥有两个不同的目标职位,DISTINCT避免同一职位重复记录导致的统计误差
方法二:自连接法
通过自连接company_person表,分别匹配CEO和Owner的职位记录,确保同一人员在同一家公司下同时存在这两个职位:
SELECT com.name AS 公司名称, per.name AS 人员姓名 FROM company_person AS cp_ceo INNER JOIN company_person AS cp_owner ON cp_ceo.company_id = cp_owner.company_id AND cp_ceo.person_id = cp_owner.person_id INNER JOIN company AS com ON com.id = cp_ceo.company_id INNER JOIN person AS per ON per.id = cp_ceo.person_id INNER JOIN position AS pos_ceo ON pos_ceo.id = cp_ceo.position_id AND pos_ceo.position_name = 'CEO' INNER JOIN position AS pos_owner ON pos_owner.id = cp_owner.position_id AND pos_owner.position_name = 'Owner';
逻辑说明:
- 将
company_person表分别以cp_ceo和cp_owner别名自连接,关联条件为同一公司、同一人员 - 分别关联
position表,确保cp_ceo对应CEO职位,cp_owner对应Owner职位 - 最终筛选出同时满足两个职位条件的人员和公司信息
内容的提问来源于stack exchange,提问作者Azad Omer
相关产品推荐
相关产品推荐

