这个SQL查询中是否需要连接?

时间:2010-09-30 19:33:26

标签: sql

假设我在sql中有一个包含4列(OrderId int,ProductID int,Price money,Size int)的表Orders,其中OrderID和ProductID作为联合主键。

如果我想要查询返回每个产品的最新订单(以及价格和尺寸)(即最大订单ID),有没有办法在没有连接的情况下执行此操作?

我在考虑以下事项:

select o.OrderId, o.ProductId, o.Price, o.Size
from Orders o inner join 
(select Max(OrderId) OrderId, ProductId from Orders group by ProductId) recent
on o.OrderId = recent.OrderId and o.ProductId = recent.ProductId

但这似乎不是最优雅的解决方案。

此外,假设包含多个产品的订单会生成多行。它们都必须是主键的一部分。

2 个答案:

答案 0 :(得分:2)

不,没有。你有正确的想法。您需要执行子查询以获取max(orderID),productID对,然后将其连接到完整表,以将查询限制为包含最大OrderId的完整表中的行。

答案 1 :(得分:0)

select
 MAX(o.OrderId) as NewestOrderID,
 o.ProductId,
 o.Price,
 o.Size
from Orders o
Group by
 o.ProductId,
 o.Price,
 o.Size