У меня есть таблица, которая поддерживает сопоставление 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
. Итак, я ищу оптимизацию подзапроса, сохраняя при этом целостность. Следовательно, утверждение "текущий подзапрос в его текущей форме кажется излишним".
SQLFiddle: http://sqlfiddle.com/#!9/2aad3/5