У меня проблема:Эффективный sql-запрос для поиска составного ключа в таблице?
Предположим, что есть таблица EMP
с данными о сотрудниках. Колонны, которые нас интересуют, это DeptID
и ManagerID
.
У меня есть список (скажем) 50 записей в следующем формате -
deptId1, managerid1 так на
Самый эффективный способ сделать это в SQL Server?
Например, если бы я был только поиск по ManagerID
, я мог бы сделать следующее:
Select * from EMP where ManagerID in (id1, id2, ..., id50);
Однако в случае пары, я вынужден выполнить следующий запрос в 50 раз:
select * from EMP where ManagerID = Mid1
AND DeptID = deptid;
EDIT:
Один подход, который я придумал:
Если изменить отчет, чтобы иметь DeptID + ManagerID
я могу сделать что-то вроде этого:
WITH TEMPTABLE AS
select * from EMP where
(DeptID + ManagerID) IN (sumID1 , sumID2.....)
select * from TEMPTABLE where ManagerID = Mid1
AND DeptID = deptid;
Как вы думаете, это может быть быстрее?
Что еще более важно, мы можем каким-то образом использовать индекс (DeptID + ManagerID)?
«Выберите * из EMP где (ManagerID, DeptId) в ((id1, dep1), (id2, dep2), ...)' Oracle должен поддерживать конструкторы строк – lad2025
К сожалению, этот запрос дает ошибку: недействительный реляционный оператор – rents
Попробуйте: 'Выберите * из EMP где (ManagerID, DeptId) в (SELECT id1 AS col1, dep1 как col2 FROM dual UNION ALL SELECT id2, dep2 FROM dual)' – lad2025