MS Access INNER ПРИСОЕДИНЯЙТЕСЬ к самой последней записи - PullRequest
0 голосов
/ 02 сентября 2011

У меня возникли проблемы с попыткой заставить Microsoft Access 2007 принять мой запрос SQL, но он продолжает выдавать мне синтаксические ошибки, которые не помогают мне исправить проблему.

У меня есть две таблицы, давайтеНазовите их «Заказчики и заказы» для упрощения.

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

SELECT c.ID, c.Name, c.Address, o.ID, o.Date, o.TotalPrice
FROM Customers c
INNER JOIN Orders o
ON c.ID = o.CustomerID
AND o.ID = (SELECT TOP 1 ID FROM Orders WHERE CustomerID = c.ID ORDER BY Date DESC)

Мне кажется, что он действителен, но Access продолжает выдавать «синтаксическую ошибку на меня, и когда я нажимаю OK, он выбирает фрагмент текста SQL, который не»даже не относится к нему.

Если я уберу дополнительное предложение SELECT, оно будет работать, но, очевидно, это не то, что мне нужно.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

Вы не можете использовать И таким образом в MS Access, измените его на ГДЕ. Кроме того, у вас есть два зарезервированных слова в именах столбцов (полей) - Имя, Дата. Они должны быть заключены в квадратные скобки, если они не начинаются с префикса имени таблицы или псевдонима или, что лучше, переименованы.

SELECT c.ID, c.Name, c.Address, o.ID, o.Date, o.TotalPrice
FROM Customers c
INNER JOIN Orders o
ON c.ID = o.CustomerID
WHERE o.ID = (
     SELECT TOP 1 ID FROM Orders 
     WHERE CustomerID = c.ID ORDER BY [Date] DESC)
0 голосов
/ 06 сентября 2011

Я разобрался, как это сделать в Microsoft Access.Вы INNER JOIN на предварительно отсортированный подзапрос.Таким образом, вам не нужно выполнять несколько ON условий, которые не поддерживаются.

SELECT c.ID, c.Name, c.Address, o.OrderNo, o.OrderDate, o.TotalPrice
FROM Customers c
INNER JOIN (SELECT * FROM Orders ORDER BY OrderDate DESC) o
ON c.ID = o.CustomerID

Насколько эффективна эта история, но она работает ...

...