UNION ALL查询:“定义的字段太多”

时间:2012-12-12 19:02:24

标签: sql ms-access

我正在尝试获得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个表?

编辑:正如RichardTheKiwi在下面所说,Access正在总结UNION链中每个SELECT查询的字段数,这意味着我的3个表超过了255个字段的最大值。所以相反,我需要像这样编写查询:

select * from table1
union all
select * from
(select * from table2
union all
select * from table3)

工作正常。

3 个答案:

答案 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]