私は次のことを達成しようとしています:
SELECT col1, col2 FROM table1
UNION
SELECT col2, col3 FROM table2
結果:
col1, col2, col3
1 , 1 , NULL
NULL, 1 , 1
列と行の結合が返されます。これは、FULL OUTER JOIN に相当する UNION と考えることができます。
この質問に対する簡単な答えは次のとおりです。
SELECT col1, col2, NULL AS col3 FROM table1
UNION
SELECT NULL AS col1, col2, col3 FROM table2
ただし、これを動的 T-SQL と dbo.sp_executesql で行うのは難しく、多数の UNION が関係している場合、結果のクエリが長くなりすぎる可能性があります。
私が思いついた最善の解決策は、次のように、可能なすべての列を含む一時テーブルを作成し、各選択を一時テーブルに順番に挿入することでした。
CREATE TABLE #temp ( col1 int, col2 int, col3 int )
INSERT INTO #temp ( col1, col2 ) SELECT col1, col2 FROM table1
INSERT INTO #temp ( col2, col3 ) SELECT col2, col3 FROM table2
ただし、これには列名が何であるかを事前に知っておく必要があります。私の特定のシナリオとこの質問では、列名が一致する場合、型も一致すると想定しています。実際、操作しようとしている列はすべて同じ型です。
これを行う簡単な方法はありますか?
ありがとう!