【问题标题】:Access Update Query: Doesn't update some rows访问更新查询:不更新某些行
【发布时间】:2019-01-31 22:47:45
【问题描述】:

我使用 ClientNew Status 表对 Access 进行了简单的更新查询。

  • 客户 是一个表格,其中包含每个客户的信息,包括他们花费的总金额以及他们的当前状态。
  • New Status 是一个表格,列出了每个客户每个月的新状态。

每个月我都会将客户的状态附加到 New Status 表中,我不会删除旧记录。旧状态保留在表中,以防需要追溯。

每个月我都会运行一个更新查询来更新 Client 表上的信息,以反映新信息(如果有)。

此更新一直有效到两个月前。它停止更新某些行。我确实验证了两个表都包含相应的文件 ID,并且购买表不包含重复项。

这是我的查询:

UPDATE Client INNER JOIN New Status 
ON Client.[File ID] = [New Status].[File ID] 
SET Client.[Client Status] = [New Status].[Client Status], 
    [Client].[Added] = [New Status].[Added], 
    Client.[Paid] = [New Status].[Paid], 
    Client.[removed] = [New Status].[removed], 
    Client.[complete] = [New Status].[complete];

请帮忙!

【问题讨论】:

  • 我刚刚注意到了!谢谢@Uueerdo

标签: sql ms-access sql-update


【解决方案1】:

既然你说:

每个月我都会将客户的状态附加到新状态表中,我不会删除旧记录。旧状态保留在表中,以防需要追溯。

Client 表中的记录与New Status 表中的记录之间似乎存在一对多的关系。

因此,由于UPDATE 查询会将每个Client 记录连接到可能几个 New Status 记录,Client 记录将更新为最后一个@ 保存的值连接记录时遇到987654327@记录,不一定是最新添加到New Status表中的记录。

如果以上正确,我建议在New Status 表中包含一个日期时间字段,该字段存储与附加此类状态的时间相对应的日期,然后过滤UPDATE 查询以仅使用最近一个月的记录,例如类似于:

UPDATE 
    Client INNER JOIN [New Status] ON Client.[File ID] = [New Status].[File ID] 
SET 
    Client.[Client Status] = [New Status].[Client Status],
    Client.[Added] = [New Status].[Added], 
    Client.[Paid] = [New Status].[Paid],
    Client.[removed] = [New Status].[removed], 
    Client.[complete] = [New Status].[complete]
WHERE
    [New Status].[Updated] >= DateSerial(Year(Date()), Month(Date()), 1)

或者,如果您的 New Status 表有一个自动递增的 ID 字段,您可以尝试以下使用相关子查询来选择具有最大 ID 值的记录以用于更新:

update 
    client c inner join [new status] n on c.[file id] = n.[file id] 
set 
    c.[client status] = n.[client status],
    c.[added] = n.[added], 
    c.[paid] = n.[paid],
    c.[removed] = n.[removed], 
    c.[complete] = n.[complete]
where not exists 
    (select 1 from [new status] m where m.[file id] = n.[file id] and m.id > n.id)

【讨论】:

  • 我也是这么想的,是不是应该删除旧记录?如果是这样的话,我想知道为什么它以前有效。
  • 我明白了,这是有道理的。我怎样才能解决这个问题? :(
  • 您现有的New Status 表是否包含确定记录年龄的字段(即如何确定哪些是“旧”记录?)
  • 它确实有一个 ID 列设置为自动编号,这有帮助吗?
  • c。和 n。怎么办??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 2011-05-04
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 2019-01-07
  • 2017-11-30
相关资源
最近更新 更多