编写Iif语句来更新表

时间:2013-10-16 11:50:45

标签: ms-access ms-access-2010

我正在使用Access 2010。

我正在尝试在三个表之间进行操作。第一个和第二个表具有相同的ID字段,因此使用它进行连接。第二个和第三个表具有部门的ID,因此使用它们进行连接。但是,并非第二个表中的所有ID都存在于第三个表中。

我正在尝试运行一个更新第一个表中字段的查询。该查询将确定第二个表中的部门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]);

1 个答案:

答案 0 :(得分:2)

如果[表3]中不存在[表2]中的所有ID,则可能需要涉及LEFT(或RIGHT)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]);

(在编辑你的问题之前,我编写了一些我自己的专栏名称,所以你必须调整以适应。)