我正在尝试完成以下任务:
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
但这需要提前知道列名是什么。我的特定场景和这个问题假设如果列名匹配类型也匹配。事实上,我试图操作的列都是相同的类型。
有没有更简单的方法来做到这一点?
谢谢!