OleDB + Jet: синтаксическая ошибка в операции соединения - PullRequest
0 голосов
/ 20 сентября 2010

Я создал сложный запрос для своей базы данных доступа, и при доступе он работает как чудо.Но когда я пытаюсь выполнить тот же запрос в моей программе через 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 и Visual Studio 2008 на случай, если это актуально.

Ответы [ 2 ]

1 голос
/ 20 сентября 2010

Нашел проблему. То, как я ввел запрос, сломало его ...

РЕДАКТИРОВАТЬ: Как вы можете видеть, я распределил запрос по нескольким строкам, чтобы его было легче читать. Когда я вставил его в исходный код, это произошло:

"SELECT FooField" +
"FROM BarTable;";

, что приводит к «SELECT FooFieldFROM BarTable;» - так явно не правильный синтаксис, это больно. Я просто не осознал это первым ...

0 голосов
/ 20 сентября 2010

Это, безусловно, запутанное сообщение.Что неправильно, так это дополнительная запятая:

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

Я надеюсь, что эти имена не являются реальными именами полей (столбцов), поскольку Value и Time являются зарезервированными словами и будут вызывать бесконечные проблемы.Я предлагаю вам хотя бы заключить их в квадратные скобки, если они являются настоящими именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...