ストアド プロシージャで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 レコード) 一時テーブル?