OLEDB +ジェット:結合操作の構文エラー
-
04-10-2019 - |
質問
アクセスデータベースの複雑なクエリを作成しましたが、アクセスでは魅力のように機能します。しかし、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 >= ?;
私はそれがまだ代表的であると感じている限り、私はクエリを破りました。直接結合の代わりにSubSelectを使用している理由は、異なる列に異なるキーを配置するために、キーバリューテーブルに複数回参加する必要があるためです。私はそれを他の方法で機能させることができませんでした。
私はC#2.0とVisual Studio 2008と協力して、それが関連しています。
解決
問題を見つけました。私がクエリを入力した方法がそれを壊しました...
編集:ご覧のとおり、クエリを複数の行に配布したため、読みやすくなります。ソースコードに貼り付けたとき、これは起こりました:
"SELECT FooField" +
"FROM BarTable;";
その結果、「foofieldfrom bartableを選択します。」 - だから明らかに有効な構文は痛いです。私は最初にそれを理解していませんでした...
他のヒント
それは確かに混乱するメッセージです。間違っているのは、余分なコンマです:
D0.Value AS ["Value"], <-- here
価値と時間は予約された単語であり、無限の問題を引き起こすため、これらの名前が実際のフィールド(列)の名前ではないことを願っています。それらが本名である場合、少なくともあなたはそれらを四角い括弧で囲むことをお勧めします。
所属していません StackOverflow