Northwind数据库仅通过表连接获取最新及最早订单的可行性咨询
基于表连接查询Northwind数据库最早/最新订单的方案
结论
完全可以仅通过表连接实现该需求,不需要使用子查询、TOP 1语法,同时天然支持同订单日期下多份订单全部返回的要求。
实现SQL代码
-- 合并返回最早+最新的所有订单 SELECT o1.* FROM Orders o1 LEFT JOIN Orders o2 ON o2.OrderDate < o1.OrderDate WHERE o2.OrderID IS NULL UNION ALL SELECT o1.* FROM Orders o1 LEFT JOIN Orders o2 ON o2.OrderDate > o1.OrderDate WHERE o2.OrderID IS NULL
逻辑说明
- 最早订单筛选:将
Orders表自连接,连接条件设为关联表o2的OrderDate小于主表o1的OrderDate,当筛选条件o2.OrderID IS NULL生效时,说明不存在比当前o1订单日期更早的订单,因此o1的订单就是全库最早的订单 - 最新订单筛选:逻辑和最早订单完全一致,仅将连接条件修改为
o2.OrderDate > o1.OrderDate,即可筛选出不存在更晚日期的所有最新订单 UNION ALL用于合并两类结果,不会去重,只要符合最早或最新条件的订单都会被完整返回,即使多份订单日期完全相同也不会遗漏
内容的提问来源于stack exchange,提问作者Riv
相关产品推荐
相关产品推荐

