Ошибка синтаксиса запроса MS Access в FROM - PullRequest
1 голос
/ 27 июня 2009

Для выполнения задания мне нужно выписать SQL, чтобы отобразить фамилию клиента, дату заказа, идентификатор продукта, структуру продукта, заказанное количество и цену за единицу. Это должно быть соединение из 4 таблиц и пользователь INNERJOIN, даже если его можно использовать.

Это задействованные таблицы.

Cus ( CID , Last, First, Phone)
Заказы ( OrdID , OrdDate, ShipDate, CID)
Manu ( ManuID , Имя, Телефон, Город)
Prods ( PrID , ManuID, Категория)
ProdFabric ( PrID , Ткань , Цена)
Строка заказа ( OrdId , PrID , Ткань , Кол-во)

Жирный означает, что это первичный ключ или часть составного ключа.

Вот запрос, который я ввел, но я получаю синтаксическую ошибку FROM, и он почему-то продолжает выделять ордера (после Cus INNERJOIN).

SELECT Last, OrdDate, Prods.PrID, Fabric, Qty, Price  
FROM Cus INNERJOIN Orders INNERJOIN Orderline INNERJOIN ProdFabric   
ON OrderLine.PrID=ProdFabric.PrID  
AND ON Orderline.Fabric=ProdFrabric.Fabric  
AND ON Cus.CID=Orders.CID  
AND ON Orders.OrdID=Orderline.OrdID;  

Что вызывает это и как я могу это решить?

Ответы [ 2 ]

1 голос
/ 27 июня 2009

AFAIK MS Access требует Lisp-подобного распространения скобок для поддержки множественных объединений.

  • Отредактируйте ваши запросы MS Access в другом редакторе, который поддерживает парен-совпадение и подсветку синтаксиса, например, Notepad ++.
  • Используйте псевдонимы таблиц, чтобы ваши запросы были короче и более управляемыми.

С круглыми скобками ваш запрос будет выглядеть примерно так:

SELECT c.Last
       , o.OrdDate
       , pf.PrID
       , pf.Fabric
       , ol.Qty
       , pf.Price
FROM   ((Cus c
       INNER JOIN Orders o ON c.CID = o.CID)
       INNER JOIN Orderline ol ON o.OrdID = ol.OrdID)
       INNER JOIN ProdFabric pf ON ol.PrID = pf.PrID;
0 голосов
/ 27 июня 2009

Я не думаю, что "И ВКЛ" существует, как вы используете его в своем запросе.
Вы должны указать каждое объединение самостоятельно.

SELECT ...
FROM cus INNER JOIN orders ON cus.cid = orders.cid
         INNER JOIN orderline ON orders.orderid = orderline.orderid
...

или вы также можете указать соединение в предложении WHERE:

SELECT ...
FROM cus INNER JOIN orders 
         INNER JOIN orderline
...
WHERE cus.cid = orders.cid
  AND orders.orderid = orderline.orderid
...

Также: ВНУТРЕННЕЕ СОЕДИНЕНИЕ - 2 слова; -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...