ストアド プロシージャでINSERTは、long の結果をUNION一時テーブルに格納する必要があります。このWHERE句は、 にあるすべてのテーブルで同じですSELECT DISTINCT。
読みやすくするために簡略化すると、次のようになります。
INSERT INTO #MyTemp
SELECT col1, col2, col3 FROM tab1 WHERE col1 in (SELECT DISTINCT myId FROM TabIds) UNION
SELECT col1, col2, col3 FROM tab2 WHERE col1 in (SELECT DISTINCT myId FROM TabIds) UNION
SELECT col1, col2, col3 FROM tab3 WHERE col1 in (SELECT DISTINCT myId FROM TabIds) UNION
.
.
.
SELECT col1, col2, col3 FROM tab20 WHERE col1 in (SELECT DISTINCT myId FROM TabIds)
TabIds通常は 3 ~ 6 レコードの長さの小さな一時テーブルですが、これはかなり効率が悪いようです。
これを行うより良い方法はありますか?
私の質問を要約すると:
一度だけ実行しSELECT DISTINCT myId FROM TabIdsて、それを一種の配列/リスト/セット(別の一時テーブルではなく)に割り当てて、それをWHERE句で使用する方法はありますか?方法がある場合、そのような方法は本当に重要ですか?小さな (3-6 レコード) 一時テーブル?