我正在尝试获得3个表的UNION,每个表有97个字段。我尝试了以下内容:
select * from table1
union all
select * from table2
union all
select * from table3
这给了我一条错误信息:
Too many fields defined.
我还尝试从第一个表中明确选择所有字段名称(为简洁而添加省略号):
select [field1],[field2]...[field97] from table1
union all
select * from table2
union all
select * from table3
当我只使用UNION这样的两个表时,它工作正常:
select * from table1
union all
select * from table2
由于此查询,我不应该超过97个字段;两表UNION只有97.那么为什么我得到Too many fields
3个表?
select * from table1
union all
select * from
(select * from table2
union all
select * from table3)
工作正常。
答案 0 :(得分:10)
看起来跟踪的字段数(限制255)是针对UNION ALL的所有部分计算的。所以3 x 97 = 291,这是过量的。您可以创建一个查询作为UNION全部由2部分组成,然后是另一个查询与第3部分。
答案 1 :(得分:0)
也许如果您的3个表有重复记录,您可以使用UNION而不是UNION ALL,这可能会减少要跟踪的字段数。因为UNION将始终服务于删除重复项的业务目的。在这种情况下,您的查询将如下,
select * from table1
union
select * from table2
union
select * from table3;
答案 2 :(得分:0)
我有两个表,每个表有173个字段(2 x 173> 255!)。因此,在使用UNION语句并使用JOIN重新组合生成的输出表之前,我不得不求助于将表分成两半(将主键保留在两者中)。
select u1.*, u2.*
from (
select [field1_PKID],[field2],...,[field110]
from table1
union all
select [field1_PKID],[field2],...,[field110]
from table2
) as u1
inner join (
select [field1_PKID],[field111],...,[field173]
from table1
union all
select [field1_PKID],[field111],...,[field173]
from table2
) as u2
on [u1].[field1_PKID] = [u2].[field2_PKID]