Ошибочная ошибка доступа 2013

Несколько дней я работаю с Access 2013 после нескольких лет работы с более ранними версиями, и, похоже, были внесены некоторые изменения во внутренний SQL-движок. Я работаю над запросом на соединение следующим образом:

SELECT T.STUKLIJSTNUMMER, SR.STUKLIJSTNUMMER, SR.SUB_STUKLIJSTNR
FROM STUKREG AS SR 
INNER JOIN (SELECT * FROM STUKREGsubs2 WHERE SUB_STUKLIJSTNR<>'') AS T ON 
SR.STUKLIJSTNUMMER=T.SUB_STUKLIJSTNR;

STUKREG — это самоссылающаяся таблица. Запрос STUKREGsubs2 выглядит следующим образом (работает, как и ожидалось):

SELECT S.STUKLIJSTNUMMER, SR.STUKLIJSTNUMMER, SR.SUB_STUKLIJSTNR
FROM STUKREG AS SR INNER JOIN STUKREGsubs1 AS S ON
SR.STUKLIJSTNUMMER=S.SUB_STUKLIJSTNR;

Из которых STUKREGsubs1 является запросом (который работает как положено):

SELECT SR.STUKLIJSTNUMMER, SR.SUB_STUKLIJSTNR, VAL(SR.STUKLIJSTNUMMER) AS SORDER
FROM STUKREG AS SR
WHERE ABS='Sub' AND CSTR(VAL(SR.STUKLIJSTNUMMER))=SR.STUKLIJSTNUMMER
ORDER BY SR.STUKLIJSTNUMMER;

Насколько мне известно, запрос всегда работал (в более ранних версиях), но теперь Access жалуется: «Указанное поле «STUKLIJSTNUMMER» может ссылаться на более чем одну таблицу, указанную в предложении FROM вашего оператора SQL». Я знаю, что это значит, но я не понимаю, почему возникает ошибка, потому что я четко различаю исходные таблицы/запросы. Это из-за использования другого запроса в части соединения? Любая помощь приветствуется!


person ganzpopp    schedule 25.03.2014    source источник
comment
Я добавил ссылочные запросы.   -  person ganzpopp    schedule 25.03.2014
comment
STUKREGsubs2 должно быть STUKREG subs2 и то же самое для STUKREGsubs1   -  person Sal00m    schedule 25.03.2014
comment
Этого не может быть, поскольку это имена задействованных запросов.   -  person ganzpopp    schedule 25.03.2014
comment
Нет, это не помогло. И я не могу изменить имя, потому что оно из таблицы, подключенной через ODBC.   -  person ganzpopp    schedule 25.03.2014


Ответы (1)


Обязательно используйте псевдонимы столбцов с одинаковыми именами из разных таблиц, чтобы их имена в результирующем запросе были уникальными.

Итак, для вашего запроса STUKREGsubs2 добавьте псевдоним к одному из выходных данных STUKLIJSTNUMMER, например:

SELECT S.STUKLIJSTNUMMER, SR.STUKLIJSTNUMMER AS STUKLIJSTNUMMER_2, SR.SUB_STUKLIJSTNR
FROM STUKREG AS SR INNER JOIN STUKREGsubs1 AS S ON
SR.STUKLIJSTNUMMER=S.SUB_STUKLIJSTNR

Затем убедитесь, что T.STUKLIJSTNUMMER в вашем первом запросе ссылается на правильный столбец в STUKREGsubs2 (либо STUKLIJSTNUMMER из запроса STUKREGsubs1, либо STUKLIJSTNUMMER_2 из таблицы STUKREG).

person Dan    schedule 25.03.2014
comment
Вот и все! Большое спасибо! - person ganzpopp; 25.03.2014