1

アクセス2010を使用しています。

3 つのテーブル間で操作を実行しようとしています。1 番目と 2 番目のテーブルには同一の ID フィールドがあるため、これを使用して結合されます。2 番目と 3 番目のテーブルには部門の ID があるため、これを使用して結合されます。ただし、2 番目のテーブルのすべての ID が 3 番目のテーブルに存在するわけではありません。

最初のテーブルのフィールドを更新するクエリを実行しようとしています。このクエリは、2 番目のテーブルの部門 ID が 3 番目のテーブルに存在するかどうかを判断します。存在する場合は、その 3 番目のテーブル (部門 ID 氏名) の別のフィールドを使用して、最初のテーブルを更新します。そうでない場合は、2 番目のテーブルの既存の部門 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 に答える