具有内部联接和子查询的Microsoft Access更新语句

时间:2013-10-16 20:17:07

标签: ms-access join

我很难搞清楚如何进行此更新查询。基本上我需要更新一个名为tblOpenJobs的表。需要使用带有最大安装日期的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;

1 个答案:

答案 0 :(得分: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中并不容易。