Sql 访问更新查询:不';不要更新某些行

Sql 访问更新查询:不';不要更新某些行,sql,ms-access,sql-update,Sql,Ms Access,Sql Update,我使用tables客户端和New Status对Access进行了一个简单的更新查询 Client是一个表,其中包含每个客户的信息,包括他们花费的总金额及其当前状态 New Status是一个表,列出每个客户机每月的新状态 每个月我都会将客户机的状态附加到新状态表的一个列表中,我不会删除旧记录。旧状态保留在表中,以防需要追溯 每个月我都运行一个更新查询来更新客户机表上的信息,以反映新的信息(如果有的话) 此更新在两个月前才开始使用。它停止更新某些行。我确实验证了这两个表都包含相应的文件ID,

我使用tables客户端和New Status对Access进行了一个简单的更新查询

  • Client是一个表,其中包含每个客户的信息,包括他们花费的总金额及其当前状态
  • New Status是一个表,列出每个客户机每月的新状态
每个月我都会将客户机的状态附加到新状态表的一个列表中,我不会删除旧记录。旧状态保留在表中,以防需要追溯

每个月我都运行一个更新查询来更新客户机表上的信息,以反映新的信息(如果有的话)

此更新在两个月前才开始使用。它停止更新某些行。我确实验证了这两个表都包含相应的文件ID,并且purchase表不包含重复项

我的问题是:

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];
请帮忙

既然您声明:

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

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

同样地,由于
更新
查询将每个
客户机
记录连接到潜在的多个
新状态
记录,因此
客户机
记录将更新到连接记录时遇到的最后一个
新状态
记录所持有的值,不一定是添加到
新状态
表中的最新记录

如果上述情况正确,我建议在
新状态
表中包含一个datetime字段,该字段存储附加该状态时对应的日期,然后过滤
更新
查询以仅使用最近一个月的记录,例如:

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)
或者,如果您的
新状态
表有一个自动递增的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)

我刚刚注意到了!谢谢@uuerdo这也是我的想法,这是否意味着我应该删除旧记录?如果是这样的话,我想知道为什么它以前有效。我明白了,这是有道理的。我怎样才能解决这个问题(您现有的
New Status
表是否包含一个确定记录年限的字段(即,如何确定哪些是“旧”记录?)它确实有一个设置为“自动编号”的ID列,这会有帮助吗?c.和n.做了什么??