获取所有员工的过期所有项目 - SQL 查询



所以这是在 MS Access 中 - 我知道,但这就是他们所拥有的 - 如果我只是设置EMP_FID=3,则作为i返回的内部查询有效。正如最初所写,他们只是用 DAO 循环遍历每个员工并在那个地方传递值,但由于现在有超过 1K 名员工,所以需要很长时间。 我正在尝试优化这一点并在单个查询中获得所需的结果。 我有以下几点:

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_fiditm_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并将其传递给内部查询的原因。为了获得所有员工逾期的所有项目。

如果您能为我指出正确的方向,我将不胜感激!

好吧,我完全想多了。 我只是把它重新设计成这个,它工作得很好:

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

最新更新