2012-12-12 20 views
3

我試圖讓3個表的聯盟,其中每個有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) 

它工作正常。

+2

是'UNION'ed的表需要有相同數量的領域,他們應該以相同的順序和相同類型的.. –

+0

@sigil如果您共享3代表的模式,它將對解決您的問題非常有幫助。無論如何無論加比aka建議這對工會 – Smit

+0

真的很重要@Gabyakagpetrioli他們有相同數量的領域,以相同的順序,和相同的類型。當我配對任何兩張桌時,'UNION'都可以正常工作。只是當我做了3個表,它失敗了。 – sigil

回答

9

看起來被跟蹤的字段數量(限制255)是針對UNION ALL的所有部分計算的。所以3 x 97 = 291,這是過剩的。你可以創建一個查詢作爲UNION的全部2個部分,然後再用另一個查詢和第三部分。

+0

很好的瞭解訪問。仍然有關它是97列。 – Woot4Moo

0

也許如果你的3個表有重複的記錄,你可以使用UNION而不是UNION ALL,這可能會減少要跟蹤的字段數。因爲UNION將始終服務於刪除重複項的業務目的。在這種情況下,您的查詢將如下,

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

我有兩個表,每個173個字段(2×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]