1

我很难弄清楚如何执行此更新查询。基本上我需要更新一个名为 tblOpenJobs 的表。它需要使用具有 Max Install 日期的 dbo_WorkOrders 表进行更新。但是这两个表之间没有直接关系,您需要在这两个表之间建立 dbo_premise 表。这是我的查询,我做错了什么?

     UPDATE tblOpenJobs 
     INNER JOIN (dbo_Premise INNER JOIN dbo_WorkOrders w (WHERE w.InstallDate IN 
     (SELECT MAX(InstallDate) FROM dbo_WorkOrders WHERE dbo_WorkOrders.PremiseKey = w.PremiseKey)) 
     ON (dbo_Premise.PremiseKey = w.PremiseKey) 
     ON tblOpenJobs.ServiceOrderNum = dbo_Premise.AccountNumber
     SET tblOpenJobs.InstallerID = w.InstallerID,
     tblOpenJobs.InstallDate= w.InstallDate,
     tblOpenJobs.New_Serial_num= w.NewSerial,
     tblOpenJobs.Old_Reading= w.OldRead;
4

1 回答 1

1

我在 Access 2007 查询窗口中检查了这一点:您的查询似乎既不是 Transact-SQL,也不是 Access,因为两者的语法不同。

在 Access 中,表别名必须使用关键字 AS,而 Transact-SQL 不需要:

UPDATE ((tblOpenJobs 
     INNER JOIN dbo_Premise
        ON tblOpenJobs.ServiceOrderNum = dbo_Premise.AccountNumber)
     INNER JOIN dbo_WorkOrders AS w 
        ON dbo_Premise.PremiseKey = w.PremiseKey)
     SET tblOpenJobs.InstallerID = w.InstallerID,
         tblOpenJobs.InstallDate = w.InstallDate,
         tblOpenJobs.New_Serial_num = w.NewSerial,
         tblOpenJobs.Old_Reading = w.OldRead
     WHERE (w.InstallDate IN 
              (SELECT MAX(InstallDate) 
               FROM dbo_WorkOrders
               WHERE dbo_WorkOrders.PremiseKey = w.PremiseKey))

这在语法上是正确的,但我不确定它是否可以更新您的数据,因为在 Access 中多表链接更新并不容易。

于 2013-10-16T21:02:50.893 回答