mysql中建立一对多映射,mysql – 如何检查特定映射是否存在于一对多映射表中

我有一个表将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表中选择一些其他列.所以,我正在寻找优化子查询,同时保持连接完好无损.因此,“目前的形式的当前子查询”似乎是多余的.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值