2011-10-28 30 views
0

私は2つのテーブルが必要です。例を見てください。私はそのIDのマッチTB1からTB2にWHERE文字列1の番号部分を見つける必要があるMYSQL文字列の一部に一致します

TB1

ID | String1 
1 | Apt 2 
2 | Apt 23 
3 | Apt 22 

TB2

ID2| String2 
1 | 23 Apartment 
2 | 22 The Block 
3 | 2 Complex 

string2の試合へ

OUTPUT

ID | Matching ID2 | String1 | String 2 
1 | 3   | Apt 2 | 2 Complex 
2 | 1   | Apt 23 | 23 Apartment 
3 | 2   | Apt 22 | 22 Apartment 
+0

明確ではありません - どの値に基づいて一致させようとしているのか説明できますか? –

+2

私には分かりません。彼はString1の番号と一致させたい。 – m0skit0

+0

申し訳ありませんが、正解です。文字列1の数字部分をstring2にマッチさせたいです。 –

答えて

0

IMHOこれは悪い表のデザインです。このようなマッチを行う必要がある場合は、別のフィールドに番号を格納します。

+0

これは、テーブルが私に来て、いくつかのマッチを実行する方法です。 –

+0

どのような形式でテーブルが来ましたか? CSV? –

+0

ALTER TABLEを実行する可能性はありますか? – m0skit0

0

本当に本当にテーブル形式を変更できない場合は、指定された文字列のすべての非数値文字を削除してクエリに使用する関数を作成します。

幸運なことに、これはあなたが、あなたのクエリで機能を使用することができhas been tackled before(あなたのイタリアは、スクラッチまでであると思います)

という作業です。したがって

select a.ID, b.ID as "Matching ID2",a.String1,b.String2  
from TB1 as a INNER JOIN TB2 as b  
ON LeaveNumber(a.String1) = LeaveNumber(b.String2) 
ORDER BY a.ID asc; 

証拠をだます、おそらくない最速しかし、それはあなたが望むあなたを取得する必要はありません。

チャンスがあれば、このテーブルデザインを変更することを真剣に考えていきますが、あたかもCSVエンジンテーブルであるか、CSVから直接入力されているかのように聞こえますが、その場合はおそらくあまりにも多くの制御権を持っていないでしょう!

関連する問題