MS Access INNER JOIN最近的条目

时间:2011-09-02 04:33:37

标签: select ms-access-2007 inner-join

我在尝试让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 个答案:

答案 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

这是另一个故事的效率,但它有效 ......