我很难搞清楚如何进行此更新查询。基本上我需要更新一个名为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;
答案 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中并不容易。