如何使用UNION ALL在不同表的select语句中使用所有列(*)?

时间:2016-09-20 10:38:44

标签: sql-server

我有10个表,其中4个表有99列,6个表有100列。我必须使用UNION ALL进行组合。执行SQL查询时遇到错误

  

Msg 205,Level 16,State 1,Line 6   使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在目标列表中必须具有相同数量的表达式。

我理解错误的原因是列数不同。我尝试使用NULL作为Column100但仍然得到相同的错误。

请有人建议我如何在SQL查询中使用*和UNION ALL。

感谢。

2 个答案:

答案 0 :(得分:2)

如果额外的列发生发生在的开头或结尾,其他列的顺序完全相同,那么您可以手动添加该列:

select t99.*, 't99' as col
from t99
union all
select t100.*
from t100;

但实际上,列出列很难吗?显式列列表更不容易出错。而且,无论第100列出现在何处,它都能正常工作。

您可以通过单击表名来获取SQL Server Management Studio中的列表。您还可以运行查询,例如:

select column_name
from information_schema.columns
where table_name = 't99';

然后使用列名来构造查询(我经常使用电子表格)。

答案 1 :(得分:0)

UNION要求匹配前后的列。 你不能做99列然后100列的联合。您必须为该表中不存在的第100列提供虚拟值,或者告诉DB跳过该列。

所以添加到较小的表中选择: NULL AS missing-column-name

或者手动列出所有常用列,省略两者中不存在的列。