0

少し背景:

このプロジェクトでは、異なるアプリケーションから取得した2つのテーブルを組み合わせようとしています。

アプリケーションの1つは、1つのテーブルに正常に結合したいくつかのテーブルを提供します。

DB_Total 

他のアプリケーションは、タグ名だけを持つ単一のテーブルを提供します。このテーブルは次のように呼ばれます。

TagNames_EA

ここで、「TagNames_EA」テーブルの「Name」列を「DB_Total」テーブルに追加して、「Name」フィールドの値を比較できるようにします。

これまでのところ、一致しない名前を比較して除外するための次のコードがあります。

SELECT
    d.Address,
    d.Type,
    d.Name,
    IIf(t.Name Is Null, False, True) AS match_found
FROM
    DB_Total AS d
    LEFT JOIN TagNames_EA AS t
    ON d.Name = t.Name;

これはうまく機能しますが、DB_TotalテーブルのTagNames_EAテーブルの「Name」値も確認したいと思います。


既存のテーブルに列を追加することは可能です。

ALTER TABLE DB_Total
ADD Names_EA

しかし、私がこれを試してみると:

ALTER TABLE DB_Total
ADD Names FROM TagNames_EA AS Names_EA

それは動作しません

これを行う簡単な方法はありますか?

編集:私は自分の状況を説明する方法を単純化しようとしました。

Edit2:例

「DB_Total」テーブルには、名前のリストがあります。これは、「EA_Names」テーブルの名前とまったく同じである必要があります。

DB_Total:
     Name
S1\SVS_AK\ENA[3]
S1\SVS_AK\ENA[4]
S1\SVS_AK\ENA[5]
S1\SVS_AK\ENA[6]
S1\SVS_AK\ENA[7]
S1\SVS_AK\ENA[8]

ただし、間違えることがあるので、一致しない名前がないか確認したいと思います。このような:

TagNames_EA
    Name
S1\SVS_AK\ENA[3]
S1\SVS_AK\ENA[4]
S1\SVS_AK\ENA[5]
S1\SVS_AK\EMA[6]  <--- This is a Mistake and will come up as a mismatch
S1\SVS_AK\ENA[7]
S1\SVS_AK\ENA[8]

現在、私が使用しているコードは、DB_Totalテーブルに新しい列を追加します。値は「-1」(一致する場合)または値「0」(一致しない名前の場合)です。

これは次のようになります:

DB_Total:               
     Name               match_found
S1\SVS_AK\ENA[3]            -1
S1\SVS_AK\ENA[4]            -1
S1\SVS_AK\ENA[5]            -1
S1\SVS_AK\ENA[6]             0
S1\SVS_AK\ENA[7]            -1
S1\SVS_AK\ENA[8]            -1

私が達成したいのは、以下を含むテーブルです。

DB_Total:               
     Name                 Names_EA       match_found
S1\SVS_AK\ENA[3]     S1\SVS_AK\ENA[3]        -1
S1\SVS_AK\ENA[4]     S1\SVS_AK\ENA[4]        -1
S1\SVS_AK\ENA[5]     S1\SVS_AK\ENA[5]        -1
S1\SVS_AK\ENA[6]     S1\SVS_AK\EMA[6]         0
S1\SVS_AK\ENA[7]     S1\SVS_AK\ENA[7]        -1
S1\SVS_AK\ENA[8]     S1\SVS_AK\ENA[8]        -1

Joeからのコメントの後、同じテーブルのEA_Tableの名前の値も確認したい場合、これが正しい方法であるかどうか疑問に思い始めています。

4

2 に答える 2

1

もちろん、ALTERステートメントは機能しません。通常、空の NULL 可能な列を最初に追加してから、2 番目のINSERTステートメントを使用してデータを入力します。ただし、名前以外に、_EA テーブルの値が DB_Total テーブルにどのような値を与えるかを定義する必要がある別の列が必要です。そうしないと、両方の適切な行が一致していることを 100% 確実に保証することができないためです。テーブル。

次のことを試して、希望する結果を得ることができます。

選択する
    d.住所、
    d.タイプ、
    d.お名前、
    t.name、
    IIf(t.Name Is Null, False, True) AS match_found
から
    DB_Total AS d
    LEFT JOIN TagNames_EA AS t
    ON d.Name = t.Name;

これにより、両方の名前の結果が隣り合わせに表示されます。ただし、適切に一致する行が実際にあることを確認するための明確な ID 値があれば、おそらく簡単です。

于 2013-02-21T09:18:16.957 に答える
1
SELECT
    d.Address,
    d.Type,
    d.Name,
    IIf(t.Name Is Null, False, True) AS match_found,
    t.name as name_ea
FROM
    DB_Total AS d
    FULL OUTER JOIN JOIN TagNames_EA AS t
    ON d.Name = t.Name;

これにより、不一致が得られます。ただし、実際には、どれがどれに一致するかは示されません。後でどれが一致するかを判断するのはあなた次第です。

于 2013-02-21T13:58:28.467 に答える