1

私は非営利団体が MS-Access データを MYSQL に移行するのを手伝っていました。そこで、データを MYSQL に移植し、ms-access で ODBC を使用して MYSQL テーブルへのリンクを作成しました。既存の SQL の大部分は正常に動作します。しかし、私はこの1つのエラーに困惑しています -

SQL 構文にエラーがあります。UNION の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください...

私は7つのUNIONSを使用してSQLを剥ぎ取り、まだ失敗している骨をむき出しにしました。

(SELECT 1 as A FROM Households H)
UNION ALL
(SELECT 2 as A FROM Households H)
UNION ALL
(SELECT 3 as A FROM Households H)

私が理解している部分は、SQLの下でUNIONの意味を1つだけ実行する限り、上記を正常に実行できるということですが、3つ目のUNIONを追加するとODBCエラーが発生します

(SELECT 1 as A FROM Households H)
UNION ALL
(SELECT 2 as A FROM Households H)

`または'または[]を使用してみましたが、どれも役に立ちませんでした。私がこのエラーに不満を感じている理由は、2 つ以上の UNION 句を使用した場合にのみエラーが発生するためです。これはドライバーの潜在的なバグでしょうか?

ms-accessと32ビットドライバーを備えたwin-7 64ビットでmysql-64ビットを使用しています。複数のUNIONを使用して他のクエリを実行し、同じテーブルセットにアクセスできるため、アーキテクチャの問題ではないはずです。

これをさらにデバッグする方法について誰かが指針を与えることができれば素晴らしいことです。

4

3 に答える 3

1

これは既知のMySQLの問題です。2つ以上のUNIONSELECTステートメントの問題(MS Accessを使用) ですが、問題がMSAccess SQLパーサー(ODBC SQLにコンパイルされる)にあるのか、MySQL ODBCドライバー(これはODBCSQLをMySQLSQLにコンパイルします)

それを解決するには、ODBCログとODBC仕様を調べて、Accessが有効なODBCSQLを出力しているかどうかを確認する必要があります。

とにかくパススルークエリを使用する方が理にかなっているので、これは労力の無駄になります。この場所でネイティブMSAccessクエリを使用する主な理由は、さまざまなデータソース(ExcelスプレッドシートやMySQLテーブルなど)に結合することです。MySQLバグレポートのコメントによると、問題は次の場合に解消されます。それを行う。

于 2013-01-03T10:48:34.563 に答える
1

私のバージョンの Access では、デザイン (SQL) ビューでクエリを編集すると、上部に 3 つのボタンが表示されます。「ユニオン」、「パススルー」、「データ定義」。

「パススルー」をクリックすると、クエリが機能します。「ユニオン」をクリックすると壊れます。このクエリに「パススルー」を使用して問題を解決できますか?

「ユニオン」または「データ定義」モードでも、これは機能するようです:

(SELECT 1, column1 as A FROM Households H)
UNION ALL
(SELECT 2, column2 as A FROM Households H)
UNION ALL
(SELECT 3, column3 as A FROM Households H);

Access が 1 つの列だけで混乱しているのではないでしょうか?

または、共用体の代わりに多重化テーブルを使用します。

SELECT mux.id,
IIf(mux.id=1,column1,IIf(mux.id=2,column2,column3)) AS A
FROM Households, mux;

注: mux テーブルには、1、2、3 の 3 つの値が必要です。それ以上ある場合は、where 句の最初の 3 つ (または n) に制限する必要があります。

于 2013-01-02T17:57:58.690 に答える