根据另一个表上的计数值更新表

时间:2015-01-09 17:02:12

标签: sql ms-access count sql-update aggregate

我使用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()=)。

我该怎么办?谢谢你的帮助!我很感激。

2 个答案:

答案 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)