所以这是在 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_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
并将其传递给内部查询的原因。为了获得所有员工逾期的所有项目。
如果您能为我指出正确的方向,我将不胜感激!
好吧,我完全想多了。 我只是把它重新设计成这个,它工作得很好:
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