2016-07-21 6 views
0

2つのテーブルがあります。 一つは Task TableSQLと一致する列の値と、あるテーブルの値と他のテーブルの列の値が結合されていない

WONumberテーブル WONumber table

タスクテーブルである今私はwonumberテーブルからwonumberを探し、タスクテーブルでタスク名を検索する必要があります。 基本的に2つのテーブルを結合します。

私はこのクエリを試してみましたが、それは

select * from task at t 
join wonumber as w 
on t.taskname like '%'+w.wonumber+'%' 

仕事doesntのが、これは70000行のように生成し、データベースを遅くし、私はそれを再起動する必要があります。 両方のテーブルが関連していない場合、別のテーブルの値を探す方法が必要です。

+0

を使用してパフォーマンス(少し)を向上させることができることを確信している場合は使用してみてください任意の特定のID、あなたが得ている結果はたくさんあります:両方のテーブルから多くのマッピング – Manjuboyz

答えて

0

データパターンが一貫していることが保証されていて、両方のテーブルのtasknumberが続くことを保証し、このパターンが "Task"テーブルの最後にあり、最後にスペースがないことを確認してください。

Select * from 
(
Select t.*, Right(t.taskname, Patindex('%#%', t.taskname) + 1) as TaskNum 
From Task t 
) a INNER JOIN WonNumber w 
on a.TaskNum = w.wonumber 

はところで、あなたは理由Tasknumberは、両方のテーブルでの別々の列でなければなりませんが悪いDB設計のこれらの奇妙な状況になっていると、これは、単純な超高速内部結合クエリになります。だから私は基本的にタスクテーブルから別々の列としてtasknumber列を抽出し、Wonnumberテーブルと結合するために使用することができます。 HTH!

1

これは確かに悪いDB設計のためですが、句を使用すると、比較したい場所をtask.taskName##***wonumber.wonumber開始で終わり、その後、あなたが

select * from task at t 
join wonumber as w 
on t.taskname like '%'+w.wonumber --no trailing '%' 
+0

彼を少し助けることができます –

関連する問題