全部查询:"Too Many Fields Defined"



>我正在尝试获取 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

当我只联合两个这样的表时,它工作正常:

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)

这工作正常。

似乎被跟踪的字段数(限制 255)被计入 UNION ALL 的所有部分。所以 3 x 97 = 291,这是多余的。 您可能会创建一个查询作为 UNION 所有 2 部分,然后创建另一个包含该部分和第 3 部分的查询。

我有两个表,每个表有 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]

也许如果您的 3 个表有重复的记录,您可以使用 UNION 而不是 UNION ALL,这可能会减少要跟踪的字段数量。因为 UNION 将始终服务于删除重复项的业务目的。在这种情况下,您的查询将如下所示,

select * from table1
union
select * from table2
union
select * from table3;

相关内容

最新更新