Получить все предметы, которые просрочены для всех сотрудников - SQL Query - PullRequest
0 голосов
/ 30 апреля 2018

Так что это в 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 и передать его во внутренний запрос. Чтобы получить все просроченные вещи для всех сотрудников.

Если вы можете просто указать мне правильное направление, я был бы очень признателен!

1 Ответ

0 голосов
/ 30 апреля 2018

Хорошо, я полностью обдумал это. Я просто переработал это к этому, и он отлично работает:

SELECT tblEmployees.ID, tblItems.ITM, tblItems.DUE_BY, tblItems.TXT 
FROM tblEmployees, tblItems 
WHERE 
tblEmployees.ID NOT IN (SELECT EMP_FID FROM tblHistory WHERE ITM_FID=tblItems.ID) 
AND 
 tblItems.ID NOT IN (SELECT ITM_FID FROM tblHistory WHERE EMP_FID=tblEmployees.ID) 
AND 
Int(tblItems.DUE_BY - Now()) <=0 
AND
tblEmployees.ACTV=True
ORDER BY tblItems.DUE_BY DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...