好的,我使用w3school 中的以下示例
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
我想知道订购金额的日期
SELECT OrderDate
FROM Orders
WHERE OrderID = (SELECT OrderID
FROM OrderDetails
WHERE Quantity = (SELECT MAX(Quantity)
FROM OrderDetails));
这很有效,但我的直觉告诉我,我需要加入还是拥有??
您需要具有最大数量的订单的日期。
看起来您并不需要两个级别的子查询。您可以使用行限制子查询:
select orderdate
from orders
where orderid = (select orderid from from orderdetails order by quantity desc limit 1)
这会更短,如果有多个订单具有相同的最大数量,也不会失败(而原始代码会失败,因为子查询返回多行(。
另一种方法使用窗口函数:
select o.orderdate
from orders o
inner join (
select od.*, rank() over(order by quantity desc) rn
from orderdetails od
) od on od.orderid = o.orderid
where od.rn = 1
这将正确地处理顶部联系,因为它将返回所有联系(而第一个查询只返回其中一个(。
我认为这是一个更清洁的解决方案!
向致以最良好的问候
select max(od.quantity) as MaxOrder,orderdate
from orderdetails as od inner join orders as o on od.orderid=o.orderid