我知道有很多类似的问题。其实我用this,它的工作原理,但我不知道如何包括记录,这在第二个表中没有匹配。加入第二张表中的最后一条记录,但包含记录在第二张表中没有匹配
我在MS SQL Server上使用示例Northwind数据库。
使用此查询:
SELECT Customers.CustomerID, Customers.CompanyName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
INNER JOIN
(
SELECT CustomerID, MAX(OrderDate) maxDate
FROM Orders
GROUP BY CustomerID
) b ON Orders.CustomerID = b.CustomerID AND
Orders.OrderDate = b.maxDate
ORDER BY Orders.OrderDate
我得到正确的结果,但缺少的记录,这不匹配。
如果我使用LEFT OUTER JOIN而不是INNER JOIN:
SELECT Customers.CustomerID, Customers.CompanyName, Orders.OrderID, Orders.OrderDate
FROM Customers
LEFT OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
LEFT OUTER JOIN
(
SELECT CustomerID, MAX(OrderDate) maxDate
FROM Orders
GROUP BY CustomerID
) b ON Orders.CustomerID = b.CustomerID AND
Orders.OrderDate = b.maxDate
ORDER BY Orders.OrderDate
我得到缺失的记录,但在这种情况下,我已经重复的客户名称。
我想要:只有他最后一个订单的顾客名单,如果他没有订单,他的名字应该出现在任何地方。
您确定您没有使用内部连接获取重复的客户名吗? –
不,没有,只需运行ORDER BY Customers.CustomerID来检查。 – Alexan
它看起来我在这里找到解决方案:http://stackoverflow.com/questions/11764413/join-record-with-most-recent-record-on-second-table?rq=1 – Alexan