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