1

我正在使用 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]);
4

1 回答 1

2

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

(在您编辑问题之前,我自己编了一些列名,因此您必须进行调整以适应。)

于 2013-10-16T12:12:33.700 回答