Подзапрос не работает со связанными таблицами Access
Я пытаюсь создать инструмент, который извлекает информацию из базы данных, содержащей финансовую информацию, но я столкнулся с этой проблемой. Следующий запрос даст мне некоторые данные, которые мне нужны, но как только я добавлю в подзапрос, я получу сообщение об ошибке
"ODBC- сбой вызова".
Если я заменю подзапрос статическим "WHERE TRAN_NUMBER IN (0,1,2,3..)"
возвращает ожидаемые значения. Подзапрос возвращает ожидаемые значения при запуске сам по себе.
Я использую MS Access и C# и библиотеку OleDB, чтобы сделать это
Есть идеи, что я сделал неправильно?
SELECT NOMINAL_CODE, DETAILS, AMOUNT, TYPE
FROM AUDIT_JOURNAL
WHERE TRAN_NUMBER IN
(SELECT AUDIT_TRAIL_ID
FROM PROJECT_TRAN
WHERE AUDIT_TRAIL_ID > 0);
Первое случайное исключение типа "System.Data.OleDb.OleDbException" произошло в System.Data.dll
Дополнительная информация: ODBC- сбой звонка
Редактировать: похоже, что подзапросы не работают, когда связаны с другой базой данных через ODBC (исходная база данных - это база данных SageLine50). Я импортировал таблицы статически, и это, кажется, работает. Кто-нибудь знает, как я могу сделать это без статического импорта таблиц?
1 ответ
Вместо использования предложения IN и подзапроса вы можете попробовать JOIN
SELECT
aj.NOMINAL_CODE,
aj.DETAILS,
aj.AMOUNT,
aj.TYPE
FROM
AUDIT_JOURNAL AS aj
INNER JOIN
PROJECT_TRAN AS pt
ON aj.TRAN_NUMBER = pt.AUDIT_TRAIL_ID
WHERE pt.AUDIT_TRAIL_ID > 0
Re: ваш комментарий в редактировании на ваш вопрос
Похоже, что подзапросы не работают, когда они связаны с другой базой данных через ODBC (исходная база данных - это база данных SageLine50).
Это, конечно, не верно для всех связанных таблиц ODBC. Я создал таблицы [AUDIT_JOURNAL] и [PROJECT_TRAN] в SQL Server 2008 R2, создал связанные таблицы в Access 2010, и ваш исходный запрос отлично работает в Access. (Мой тоже.) Ваша проблема почти наверняка вызвана недостатком драйвера SageLine50 ODBC.