【问题标题】:Update a table based on the count values on another table根据另一个表上的计数值更新一个表
【发布时间】:2015-01-09 17:02:11
【问题描述】:

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

Table 1: request

 - Columns: requestID, requestStatus

Table 2: requestItem

 - Columns: requestItemID, requestID, requestItemStatus

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

如果请求的所有请求项都“完成”requestItemStatus,我想更新 request 表,将请求的 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()=)中有聚合函数。

我应该在这里做什么?谢谢你的帮助!我很感激。

【问题讨论】:

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


    【解决方案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")
    

    【讨论】:

      【解决方案2】:

      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)
      

      【讨论】:

        猜你喜欢
        • 2022-08-17
        • 2012-09-05
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多