7

それぞれが97個のフィールドを持つ3つのテーブルのUNIONを取得しようとしています。私は次のことを試しました:

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のテーブルが2つしかない場合は、正常に機能します。

select * from table1
union all
select * from table2

このクエリの結果として、97を超えるフィールドになってしまうことはありません。2テーブルのUNIONには97しかありません。では、なぜToo many fields3つのテーブルを使用するのでしょうか。

編集:RichardTheKiwiが以下に示すように、AccessはUNIONチェーン内の各SELECTクエリのフィールド数を合計しています。これは、3つのテーブルが最大255フィールドを超えていることを意味します。したがって、代わりに、次のようにクエリを作成する必要があります。

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

これは正常に動作します。

4

3 に答える 3

12

追跡されているフィールドの数(制限255)は、UNIONALLのすべての部分に対してカウントされているようです。したがって、3 x 97 = 291であり、これは超過です。おそらく、2つの部分すべてのUNIONとしてクエリを作成し、次にそれと3番目の部分を使用して別のクエリを作成することができます。

于 2012-12-12T19:06:52.613 に答える
0

おそらく、3 つのテーブルに重複するレコードがある場合は、追跡するフィールドの数を減らすことができる UNION ALL の代わりに UNION を使用できます。UNION は常に重複を削除するビジネス目的に役立つためです。その場合、クエリは次のようになります。

select * from table1
union
select * from table2
union
select * from table3;
于 2012-12-12T19:19:24.433 に答える