0

アクセスデータベース用の複雑なクエリを作成しましたが、アクセスではそれが魅力のように機能します。しかし、OleDBを介してプログラムで同じクエリを実行しようとすると、「結合操作の構文エラー」という例外が発生します。これ以上の情報はありません。

SELECT
    MainTable.Main_dbID,
    D0.Kvp_Value AS ["Value"]
FROM (MainTable
INNER JOIN (
    SELECT Main_dbID, Kvp_Value
    FROM KVPTable
    WHERE Kvp_Code IN (1, 2, 4)
) AS D0
ON D0.Main_dbID = MainTable.Main_dbID)
WHERE Main_Time <= ? AND Main_Time >= ?;

私はそれがまだ代表的であると感じた限り、クエリを分解しました。直接結合の代わりに副選択を使用している理由は、さまざまなキーをさまざまな列に配置するために、キー値テーブルに複数回結合する必要があるためです。私はそれを他の方法で機能させることができませんでした。

必要に応じて、C#2.0とVisualStudio2008を使用しています。

4

2 に答える 2

1

問題が見つかりました。私がクエリを入力した方法はそれを壊しました...

編集:ご覧のとおり、クエリを複数行に分散しているので、少し読みやすくなっています。私がそれを私のソースコードに貼り付けたとき、これは起こりました:

"SELECT FooField" +
"FROM BarTable;";

その結果、「SELECTFooFieldFROMBarTable;」になります。-明らかに有効な構文ではないので、苦痛です。私は最初にそれを認識していませんでした...

于 2010-09-20T11:59:36.690 に答える
0

それは確かに紛らわしいメッセージです。何が問題なのかは、余分なコンマです。

D0.Value AS ["Value"],  <-- here

値と時間は予約語であり、無限の問題を引き起こすため、これらの名前が実際のフィールド(列)名ではないことを願っています。本名の場合は、少なくとも角かっこで囲むことをお勧めします。

于 2010-09-20T10:09:33.620 に答える