【发布时间】:2016-03-19 18:52:57
【问题描述】:
我有一个表,该表维护EMPLOYEE_ID 到可以分配给员工的一个或多个ROLE_IDs 的映射。 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 表中选择其他列。所以,我正在寻找优化子查询,同时保持连接不变。因此,语句“当前形式的当前子查询似乎是多余的”。
SQLFiddle:http://sqlfiddle.com/#!9/2aad3/5
【问题讨论】:
-
我想你的意思是
ROLE_ID = 2,而不是EMPLOYEE_ID = 2。