我在尝试让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子句,它可以工作,但显然不是我需要的。
有什么想法吗?
答案 0 :(得分:1)
您不能在MS Access中以这种方式使用AND,将其更改为WHERE。此外,列(字段)名称中有两个保留字 - 名称,日期。如果没有以表名或别名作为前缀,或者更好,重命名,则应将它们括在方括号中。
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)
答案 1 :(得分:0)
我找到了如何在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
这是另一个故事的效率,但它有效 ......