Подзапрос не работает со связанными таблицами 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.

Другие вопросы по тегам