2013-07-19 5 views
1

Я пытаюсь присоединиться к полю псевдонима с функцией в запросе. Возможно ли это в MS Access?Доступ: Query Join on Alias ​​field

SELECT Mid([StockNum],1,9) AS StockTrim 
FROM POs LEFT JOIN [STOCK DICTIONARY] 
    ON POs.[StockTrim] = [STOCK DICTIONARY].[Stock] 
GROUP BY Mid([StockNum],1,9), [STOCK DICTIONARY].Stock 
HAVING ((([STOCK DICTIONARY].Stock) Is Null)); 

В этом примере я пытаюсь присоединиться на вычисляемом поле StrockTrim, но доступ поднимает поле ввода «Введите значение параметра» для POs.StockTrim

ответ

3

Иногда вы можете использовать псевдоним в запросе, иногда нет. В вашем случае, следующий должен работать (я также очистить свой GROUP BY/HAVING поля более подходящего ИНЕКЕ):

SELECT Mid([StockNum],1,9) AS StockTrim 
FROM POs LEFT JOIN [STOCK DICTIONARY] 
    ON Mid(POs.[StockNum],1,9) = [STOCK DICTIONARY].[Stock] 
WHERE [STOCK DICTIONARY].Stock Is Null 
GROUP BY Mid([StockNum],1,9) 

Понимание, когда вы можете использовать псевдоним в запросе доступа и когда вы не можете быть немного темного искусства. Вообще говоря, вы можете использовать псевдоним, если он встречается позже в плане запроса, чем он появляется первым. Например, вы можете использовать:

SELECT Mid([StockNum],1,9) AS StockTrim, "Trim #:" & StockTrim AS StockTrimNumber 

Поле StockTrimNumber, которое происходит позже в этом образце ЗЕЬЕСТЕ, чем рассчитанное поле StockTrim, можно использовать вычисленное поле StockTrim в своем собственном определении поля.

В вашей ситуации соединение происходит до того, как какое-либо из полей будет вычислено или возвращено, поэтому вам нужно повторить определение поля в предложении JOIN.

Аналогичным образом, если вы хотите отфильтровать на основе вычисленного поля, вам нужно будет использовать само определение поля (например, WHERE Mid([StockNum],1,9) LIKE "???XYZ???"), но с использованием только псевдонима не удастся (например, WHERE StockTrim Like "???XYZ???").

+0

У меня возникла ошибка синтаксиса: '(отсутствующий оператор) в выражении запроса« Mid ([StockNum], 1,9) Где [СЛОВАРЬ СЛОВА] .Stock Null ". Если я изменяю 'Where' на' Have', я получаю сообщение: 'Вы пытались выполнить запрос, который не включает выражение '[STOCK DICTIONARY] .Stock Is Null' как часть агрегатной функции. ' – Rick

+0

Извините, Я перепутал порядок предложений WHERE и GROUP BY. Я обновил свой ответ. Пожалуйста, попробуйте это и сообщите мне, если это сработает. – mwolfe02

0

Поскольку вы приняли большой ответ mwolfe02, я надеюсь, что проблема решена. Я хочу отметить, что, поскольку StockTrim является немедленное конструкт, а не поле в POs, могут возникнуть проблемы с:

ON POs.[StockTrim] = [STOCK DICTIONARY].[Stock] 

Вы можете иметь успех:

ON [StockTrim] = [STOCK DICTIONARY].[Stock] 

Что бы предположить, нет поля с именем StockTrim в STOCK DICTIONARY.

Просто в стороне - вам будет лучше в доступе, если вы избежите использования пробелов в именах объектов, включая таблицы и запросы. STOCK DICTIONARY будет работать лучше, например, STOCK_DICTIONARY.

+0

Я получаю сообщение об ошибке: «JOIN выражение не поддерживается». – Rick