2017-04-12 20 views
-2

Iは3つのテーブル、T1、T2、T3を有するはインナーSQL Serverでダーティデータを有する3つのテーブルを結合

  • T1は、列を有するA、B、C
  • T2は、列C、D、E
  • を有します
  • T3は、列E、F、Gを有する
  • アイデアがである

インナーそれらのすべてがA、B、C、D、E、F、G

I既に列を持つテーブルTを取得するために参加今方法3つのテーブルの結合を行うと、問題は、T2とT3をリンクするはずの列Eが非常に騒々しいことです。数値であると思われますが、すべての種類の値(テキスト、句読点など)を持ちます。

ifステートメントを使用して内部結合を行うにはどうすればよいですか?表T2において

  • ここ列Eの一例である。、10000001、$ 4542、1892348、2347239( '' ノイズが$ 4542であり)表T3において

  • :10000001、1892348、 2347239(表3はかなりきれいです)

それはint型

+2

サンプルデータと望ましい結果を提供します。 –

+0

私たちがより良く援助できるように列Eの例を提供できますか?パフォーマンスが低下する可能性はありますが、データの不一致の程度を知ることは困難ですが、値の置換または条件付きのケースを結合条件として使用できます。 – engineersmnky

+0

数字以外の文字のセットは予測可能であり、石で設定されていますか?言い換えれば、 "$"、 "。"、そしておそらく "_"のような文字の集合ですか?もしそうなら、あなたは簡単にそれらの既知の文字を取り除いてあなたの参加をすることができます。しかし、それが予測不可能な場合、または非常に大きなセットの場合、それは扱いにくいでしょう。いずれにしても、パフォーマンスが低下します。 – pmbAustin

答えて

1

ユーザーTRに$ 4542に変換することができないので、アイデアは数字のみの値に一致するようになるが、標準は休憩を登録しようjoinをして非数値を排除しながらy_castを実行します。私はt2で悪いデータを持つフィドルをしましたが、他のテーブルのためにそれを拡張することもできます。

http://sqlfiddle.com/#!6/0f4b7/4

Select * from t2 inner join t3 
ON t2.E=T3.E and 
TRY_CAST(t2.E As INT) IS NOT NULL 
0

あなたは一つのことを明確にすることができます。あなたは騒々しいレコードを除外したいのですか、または特殊文字を削除した後にそれに参加する必要があります。

これは私が信じるケースとパトリンデックスによって行うことができます。

関連する問題