1

こんにちは、誰かがこのクエリで私を助けることができるかどうか疑問に思います. 2 つの列を持つデータ セットがあります。列 A/列 B; これを Table UpdateData と呼びましょう。

これらのコードのマッピング テーブルであるスタンディング データを含む 2 つの Access テーブルもあります。1 つの表は更新前のコード (oldCodes) で、もう 1 つの表はシステム更新後のコード (NewCode) です。私のデータセットでは、列 A には更新前のコードがあり、列 B には更新後のコードがあります。私のアイデアは、これら 2 つの Access テーブルの新しいコードと古いコードを、次のように SQL Server (2005) の 1 つのテーブルに結合することでした。

Oldcode    display 
=====     =======
RTYX45    No
GHYUN6    No
BYUER5    Yes

Newcode    display 
=====      =======
VUJNG6     Yes
LERWS8     No
XCRYU7     Yes

code      display 
=====     =======
RTYX45    No
GHYUN6    No
BYUER5    Yes
VUJNG6    Yes
LERWS8    No
XCRYU7    Yes

これはデータの例にすぎず、表示されているよりもはるかに多くの行があることに注意してください。

したがって、updateData と Combined コードを結合する場合、1 つのフィールド (表示) が列 A/B のいずれかからの一致を表示できるように設定するにはどうすればよいですか (またはしない)。1 つの列のみに結合した場合、combinedCodes テーブルから updateData テーブルへの左結合を持つ列 A を言うと、combinedCodes 表示フィールドに正しいデータが表示され、一致しなかったフィールドには null が表示されます。

しかし、次に、CombinedCodes から UpdateData テーブルへの左結合を使用して列 B から別の結合を導入すると、combinedCodes の表示で、null の前に古いコードが表示されましたが、新しいコードが使用される前に古いコードも表示されました。実際に起こっていることと少し混乱していたので、これは100%正しくないかもしれませんが、各クエリ結果を個々の結合と比較すると、列Aと列Bへの結合によるクエリ結果は異なりましたが、追加時のデータ数は同じでした個別のクエリから個別のカウントを増やします。

select c.Fields
--,f.Display
,pt.Display
 from UpdateData c 
INNER JOIN PRE_CODES pt
ON c.columnA = pt.code -- only for pre-codes
--INNER JOIN POST_CODES f
--ON c.columnB = f.code

コメントアウトされた結合とフィールドは郵便番号用で、もう 1 つは事前コード用です。郵便番号の null を表示するために左外部結合を含めてから、2 番目の結合と f.display とフィールドの左結合を導入すると、それぞれを個別に実行して結合した場合と同じ結果が表示されません。

この種の結合は、結合に関する私の理解を超えています。ここで何をすべきか正確にはわかりません。これで私を助けてくれる人に

ありがとう

アンドリュー

4

1 に答える 1

1

あなたが何をしようとしているのか理解できれば、いくつかの選択肢があります。

1 つは、コード テーブルごとに 1 つずつ、合計 2 つのクエリを記述し (それぞれの場合に内部結合を使用して null がないようにする)、UNIONを使用して結果を結合し、結合されたテーブルのデータを生成することです。

もう 1 つは、左外部結合を使用して各テーブルに結合する単一のクエリを作成することです。これにより、1 つのテーブルに対して値または null のいずれかを持つ 1 つの列と、そのテーブルに対して値または null のいずれかを持つ別の列が生成されます。他のテーブル。次に、 COALESCEを使用してこれら 2 つの列を 1 つの非 null 列に結合する別の列を結果に追加します。

于 2013-04-03T16:01:01.500 に答える