2013-10-16 42 views
1

我正在使用Access 2010.編寫Iif語句更新表

我想在三個表之間執行操作。第一個和第二個表具有相同的ID字段,因此使用它進行連接。第二個和第三個表具有部門的ID,因此使用它們進行連接。不過,並不是第二張表中的所有ID都存在於第三張表中。

我正在嘗試運行將更新第一個表中的字段的查詢。該查詢將確定第二個表中的Department ID是否存在於第三個表中。如果是,則使用該第三個表(部門ID全名)中的另一個字段更新第一個表。如果不是,則使用第二個表中現有的部門ID更新第一個表。

這是我到目前爲止有:

Field: Relevant field in Table 1 
Table: Table 1 
Update To: IIf([Table 2].[Dept ID] In (SELECT [Table 3].[Dept ID] FROM [Table 3]),[Table 3].[Dept ID Full Name],[Table 2].[Dept ID]) 

我從來沒有寫入之前這樣的事和我完全陌生的IIF查詢,所以我不知道這是否甚至遠程關閉!目前我有一個錯誤:「操作必須使用可更新的查詢」。

編輯 - 在SQL:

UPDATE 
    ([Table 1] INNER JOIN 
     [Table 2 ON [Table 1].[ID] = [Table 2].[ID]) INNER JOIN 
      [Table 3] ON [Table 2].[Dept ID] = [Table 3].[Dept ID] 

SET [Table 1].[Dept] = 

IIf([Table 2].[Dept ID] In (SELECT [Table 3].[Dept ID] FROM [Table 3]), 
[Table 3].[Dept Name],[Table 2].[Dept ID]); 
+0

我不確定那是什麼,對不起。如果有幫助,我在後臺添加了SQL代碼。 –

回答

2

如果不是所有的ID的是在[表2]存在於[表3]然後涉及左(或右)中的溶液JOIN可以是需要。我只是想下面的SQL語句,它似乎是爲我工作:(我做了我自己的一些列名的你編輯你的問題之前,所以你必須調整以適應)

UPDATE 
    (
     [Table 1] 
     INNER JOIN 
     [Table 2] 
      ON [Table 1].Key1 = [Table 2].Key1 
    ) 
    LEFT JOIN 
    [Table 3] 
     ON [Table 2].[Dept ID] = [Table 3].[Dept ID] 
SET 
    [Table 1].FieldToUpdate = IIf(IsNull([Table 3].[Dept ID]),[Table 2].[Dept ID],[Table 3].[Dept ID Full Name]); 

+0

完美。我最初只是將我想要的東西分成兩個查詢,並將它們依次運行,但這樣做的確很好。非常感謝! –