JOIN查询中不同OrderId值是否会被顺序返回?
关于JOIN查询后OrderId顺序的问题
- 结论:完全不能保证不同的OrderId会按顺序返回,甚至连同一个OrderId的所有明细行都不一定连续出现。
- 原因:SQL标准里没有规定未指定
ORDER BY的查询必须返回有序结果。数据库的查询优化器会根据索引情况、数据存储分布、执行计划(比如哈希连接、嵌套循环连接的选择)等因素自行决定返回行的顺序——这次查询看起来OrderId是凑在一起的,下次数据量变化或者执行计划调整,顺序就可能完全打乱。 - 针对你的处理场景:如果要循环处理记录集,遇到新OrderId就创建新对象,必须在SQL语句末尾加上明确的排序逻辑,比如:
SELECT Order.Name, OrderDetails.OrderId, OrderDetails.Quantity FROM Order INNER JOIN OrderDetails ON Order.Id = OrderDetails.OrderId ORDER BY OrderDetails.OrderId
只有这样才能确保同一个OrderId的所有明细行连续返回,避免出现同一个OrderId的行被拆分、重复创建对象的问题。
内容的提问来源于stack exchange,提问作者Janeks Bergs
相关产品推荐
相关产品推荐

