我使用MS Access VBA根据另一个表上的计数值更新数据库文件中的表,该表引用回我要更新的表。
Table 1: request
- Columns: requestID, requestStatus
Table 2: requestItem
- Columns: requestItemID, requestID, requestItemStatus
1个请求可以有n个请求项,但1个请求项只能包含在1个请求中。
如果请求的所有请求项都有"完成"我想更新请求表 requestItemStatus ,将请求的 requestStatus 更新为"完成"同样。
我第一次尝试了以下内容:
Update request SET request.request_status_id = "complete" WHERE COUNT(SELECT requestItem.* FROM requestItem WHERE requestItem.requestID = request.requestID) = COUNT(SELECT requestItem.* FROM requestItem WHERE requestItem.requestID = request.requestID AND requestItem.request_item_status_id = "complete")
但是VBA抱怨SQL语句不能在表达式中使用聚合函数(COUNT()=)。
我该怎么办?谢谢你的帮助!我很感激。
答案 0 :(得分:1)
查询可以表示为"如果所有子请求项都没有完整的状态,则将请求设置为完成",即:
UPDATE Request
SET request_status_id = "complete"
WHERE NOT EXISTS
(SELECT 1 FROM RequestItem
WHERE RequestItem.RequestId = Request.RequestID
AND Request_item_status_id <> "complete")
答案 1 :(得分:0)
Stuartd上面提到的可能是最简单的方法。如果您只想更新空白或&lt;&gt;的实际记录,则可以使用以下选项。完成。我希望这有帮助!确保首先在测试环境中尝试。
UPDATE Request SET RequestStatus = "Complete" WHERE RequestID IN (
SELECT Request.RequestID
FROM Request
JOIN (SELECT RequestItem.requestItemID, RequestItem.requestID, RequestItem.requestItemStatus
FROM RequestItem WHERE RequestItem.requestItemStatus <> "Complete") DONTUP ON DONTUP.requestID = Request.RequestID)