2

2 つの別々のデータ セットをマージしようとしています。2 つのデータ セット間で、一部のエントリが重複している可能性があります。

表1:

 Common Field A | Field 1 | Field 2
 ---------------------------------
       a            a1        a2
       b            b1        b2

表 2:

  Common Field B | Field 3 | Field 4
 ---------------------------------
       c            c1        c2
       a            a1        a2

取得する共通フィールドでユニオン クエリを実行しました。

  Common Field 
 ---------------
       a
       b
       c

今私は2つの結合をしました。ユニオン クエリとテーブル 1 の間の 1 つの結合、およびユニオン クエリとテーブル 2 の間の 1 つの結合。 基本的に、各結合は、ユニオン クエリのすべてのエントリが一覧表示され、テーブルの共通フィールドが一致する行が表示されるように行われます。ユニオン クエリ エントリが一覧表示されます。これを行った後、すべての列を含むクエリを作成しました (上記の 2 つの結合に注意してください)。これが私が期待したものです:

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b                             b1        b2
       c                                c                                c1        c2

ここに私が得ているものがあります:

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b              #Error         b1        b2
       c             #Error             c                                c1        c2

#Error サインが表示される理由がわかりません。共通フィールド エントリに対してのみ #Error サインが表示される理由と同じくらい混乱しています。どちらかといえば、少なくとも次のように取得することを期待していました。

 Common Field | Common Field A | Common Field B | Field 1 | Field 2 | Field 3 | Field 4
 ------------------------------------------------------------------------------------------
       a               a                a            a1        a2        a1        a2
       b               b              #Error         b1        b2      #Error    #Error
       c             #Error             c          #Error    #Error      c1        c2

それらを取り除く方法はありますか?IIF(IsError(....)) を使用してみましたが、うまくいきませんでした。人々が #Error メッセージを取り除こうとしたが、解決できなかったオンラインの試みをいくつか見つけました。問題の根本にたどり着いたほうがよいことはわかっていますが、この時点では #Error メッセージ自体を取り除くだけで問題ありません。これにどのようにアプローチすべきかについてのアイデアはありますか?

編集: SQL の例を次に示します。

SELECT qryUnion.CommonField, tbl1.CommonFieldA, tbl2.CommonFieldB, tbl1.Field1, tbl1.Field2, tbl2.Field3, tbl2.Field4 
FROM tbl2 RIGHT JOIN ( tbl1 RIGHT JOIN qryUnion ON tbl1.CommonFieldA = qryUnion.CommonField) ON tbl2.CommonFieldB = qryUnion.CommonField;

EDIT2:重要な場合の結合のSQLは次のとおりです。

SELECT tbl1.CommonFieldA FROM tbl1 UNION tbl2.CommonFieldB FROM tbl2
4

1 に答える 1

1

#error の表示とクエリの構文を考えると、クエリ ウィンドウでこれを行ったと思います。

新しいクエリを作成し、テーブルの追加ウィンドウを取り除き、それを SQL ビューに入れ、次のロジックを入れます。

select c.unique, a.commonfieldA, b.commonfieldB, a.field1, a.field2, b.field3, b.field4
from (
    select distinct u as unique from (
        select commonfieldA as u from tbl1 
        union all
        select commonfieldB as u from tbl2
    ) combined ) c 
    left join tbl1 a on c.unique = a.commonfieldA
    left join tbl2 b on c.unique = b.commonfieldB

これはうまくいくはずです。私はあなたが持っているユニオン構文を使用せず、代わりにユニオンオールコンポジット(サブクエリ「結合」)から個別の値を選択します。左結合とは、結合条件の左側のテーブルにデータが存在する必要があることを意味します (つまり、c は tbl1 または tbl2 の宣言の前に定義されたテーブルです) が、データは右側のテーブルに存在する場合と存在しない場合があります。 .

あなたが何をしようとしているのかを理解しようとして、アクセスが生成する構文に問題を置きます。

于 2012-08-22T03:22:09.867 に答える