我有一个表将EMPLOYEE_ID的映射维护到可以分配员工的一个或多个ROLE_ID. ROLE_ID是ROLE表的主键.
现在,我试图找到一个特定的员工是否是团队领导(ROLE_ID = 2).也就是说,本质上是尝试查找映射表中是否存在(EMPLOYEE_ID,2)的特定映射组合.
目前,我正在使用以下查询来实现:
SELECT E.NAME AS `EMPLOYEE_NAME`,
EXISTS( SELECT 1 FROM `EMPLOYEE_ROLE` WHERE
(`EMPLOYEE_ROLE`.`EMPLOYEE_ID` = `E`.`EMPLOYEE_ID`)
AND (`EMPLOYEE_ROLE`.`ROLE_ID` = 2)) AS `IS_TEAM_LEADER`
-- Assume some other column shall be selected from ER table,
-- hence necessitating the JOIN on ER
FROM EMPLOYEE E
JOIN EMPLOYEE_ROLE ER ON (ER.EMPLOYEE_ID = E.EMPLOYEE_ID)
GROUP BY E.EMPLOYEE_ID;
虽然这似乎完成了工作,但我正在寻找一种更有效的方法,因为当前形式的子查询似乎是多余的.不确定它是否相关,但可以使用FIND_IN_SET或某些此类功能吗?
任何人都可以提出解决方案,因为我对最好的方法感兴趣?
编辑1:我有意使用JOIN EMPLOYEE_ROLE,意图是从ER表中选择一些其他列.所以,我正在寻找优化子查询,同时保持连接完好无损.因此,“目前的形式的当前子查询”似乎是多余的.