Так что это в MS Access - я знаю, но это то, что у них есть - и внутренний запрос, возвращаемый как i
, работает, если я просто установил EMP_FID=3
. Как изначально написано, они просто просматривали каждого сотрудника с DAO и передавали значение в этом месте, но, поскольку в настоящее время число сотрудников превышает 1 тыс., Это занимает вечность. Я пытаюсь оптимизировать это и получить желаемые результаты в одном запросе. У меня есть следующее:
SELECT e.ID, i.ITM, i.DUE_BY, i.TXT FROM tblEmployees as e, (SELECT tblItems.ITM, tblItems.DUE_BY, tblItems.TXT
FROM tblItems
LEFT JOIN (SELECT ITM_FID FROM tblHistory WHERE EMP_FID=e.ID) as h
ON tblItems.ID = h.ITM_FID
WHERE h.ITM_FID Is Null And Int(tblItems.DUE_BY - Now()) <= 0
ORDER BY tblItems.DUE_BY DESC) as i
Запрос выполняется, но не возвращает результат, если я знаю, что он должен вернуть одну запись.
tblItems
содержит список вещей, которые сотрудники должны выполнить.
tblHistory
содержит emp_fid
и itm_fid
, а также дату их завершения.
tblEmployees
имеет сотрудников.
Как уже говорилось ранее, это работает:
SELECT tblItems.ITM, tblItems.DUE_BY, tblItems.TXT
FROM tblItems
LEFT JOIN (SELECT ITM_FID FROM tblHistory WHERE EMP_FID=3) as h
ON tblItems.ID = h.ITM_FID
WHERE h.ITM_FID Is Null And Int(tblItems.DUE_BY - Now()) <= 0
ORDER BY tblItems.DUE_BY DESC
Но вы не знаете, какой это был сотрудник. Вот почему я пытаюсь добавить tblEmployees
, чтобы получить ID
и передать его во внутренний запрос. Чтобы получить все просроченные вещи для всех сотрудников.
Если вы можете просто указать мне правильное направление, я был бы очень признателен!