首页 文章

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

提问于
浏览
0

我正在使用MS Access VBA根据另一个表上的计数值更新数据库文件中的表,该表引用回我想要更新的表 .

Table 1: request

 - Columns: requestID, requestStatus

Table 2: requestItem

 - Columns: requestItemID, requestID, requestItemStatus

1个请求可以有n个请求项,但1个请求项只能包含在1个请求中 .

如果请求的所有请求项都有"complete" requestItemStatus ,我想更新 request 表,同时将请求的 requestStatus 更新为"complete" .

我第一次尝试了以下内容:

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 回答

  • 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")
    
  • 0

    Stuartd上面提到的可能是最简单的方法 . 如果您只想更新空白或<>完成的实际记录,则可以使用以下选项 . 我希望这有帮助!确保首先在测试环境中尝试 .

    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)
    

相关问题