我有10个表,其中4个表有99列,6个表有100列。我必须使用UNION ALL进行组合。执行SQL查询时遇到错误
Msg 205,Level 16,State 1,Line 6 使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在目标列表中必须具有相同数量的表达式。
我理解错误的原因是列数不同。我尝试使用NULL作为Column100但仍然得到相同的错误。
请有人建议我如何在SQL查询中使用*和UNION ALL。
感谢。
答案 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
或者手动列出所有常用列,省略两者中不存在的列。