1

この更新クエリの実行方法を理解するのに苦労しています。基本的に、tblOpenJobs という名前のテーブルを更新する必要があります。最大インストール日を含む dbo_WorkOrders テーブルで更新する必要があります。ただし、これらの 2 つのテーブル間に直接的な関係はありません。間に 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 クエリ ウィンドウでこれを確認しました。2 つの構文が異なるため、クエリは 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 に答える