Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Access > Расшифровка полей одной таблицы через поле другой


Автор: Sand_Girl 2.4.2007, 10:34
  Здравствуйте. Проблема в следующем. Есть 2 таблицы: menu и auto. В menu содержится расшифровка полей таблицы auto. Задание состоит в том, чтобы вывести таблицу auto в расшифрованном виде.
Структура таблицы menu следующая:
C_MENU | C_REC| NAME_REC
      С      |     )     |    легковой авто
      B      |     *     |   Россия
...
Структура таблицы auto:
Number | С_TYPE | С_PLANT| ...
   1        |     С)      |     B*
...
Таким образом, расшифровка для каждого из полей находится в поле NAME_REC таблицы menu. И чтобы расшифровать тип (С_TYPE) автомобиля с Number 1 необходимо найти такое поле NAME_REC, для которого выполняется условие: (C_MENU + C_REC) = NAME_REC. Таким же образом для C_PLANT и т.д. Запрос пишу следующим образом (пытаюсь расшифровать 2 поля: C_TYPE и C_PLANT): 

SELECT 
auto.Number,  type.NAME_REC as Тип, factory.NAME_REC as Завод
FROM auto 
INNER JOIN menu type ON auto.C_TYPE = (type.C_MENU + type.C_REC)
INNER JOIN menu factory ON auto.C_PLANT = (factory.C_MENU + factory.C_REC)
ORDER BY Number

Если убрать второй inner, всё отлично срабатывает. А так выдаёт ошибку: "Ошибка синтаксиса (пропущен оператор) в выражении запроса ' auto.C_TYPE = (type.C_MENU + type.C_REC) INNER JOIN menu factory ON auto.C_TYPE = (factory.C_MENU + factory.C_REC) ' "

Работаю с БД через ADO, в C++ Builder.

Если возможно, подскажите, пожалуйста, в чём дело. Просто это задание на лабораторную, в лекциях подобного не было, в инете тоже не удалось найти.

Автор: Akina 2.4.2007, 11:39
Цитата(Sand_Girl @  2.4.2007,  11:34 Найти цитируемый пост)
подскажите, пожалуйста, в чём дело.

Скобки надо не забывать расставлять.

Код

SELECT 
auto.Number,  type.NAME_REC as Тип, factory.NAME_REC as Завод
FROM 
(
(
auto 
INNER JOIN menu type ON auto.C_TYPE = (type.C_MENU + type.C_REC)
)
INNER JOIN menu factory ON auto.C_TYPE = (factory.C_MENU + factory.C_REC)
)
ORDER BY Number

А то получалось что второй inner join становился частью условия связывания первого.

Автор: Sand_Girl 2.4.2007, 12:29
 Спасибо  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)