SqlServer group by导致顺序发生变化

删库到跑路 2020-05-17 06:17:08
SqlServer 一个多表连接的语句,没有使用order by  ,在使用group by多个字段后顺序不断发生变化,如下图也


select
distinct a4.ID
from
YieldTransit as a1
inner join QueryZL as a2 on a2.YieldTransit_ID = a1.ID
left join QueryZLStuffUP as a3 on a3.QueryZL_ID = a2.ID
left join TestYieldAppraiseProduct as a4 on a4.ID = a3.TestYieldAppraiseProduct_ID
where

group by
a1.id
,a2.ID,
a4.ID,a3.ID
--,a7.Name
--,a9.TypeName
--,a9.ID









...全文
609 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2020-05-18
  • 打赏
  • 举报
回复
group by 本来就没有排序功能 group by 是不具备排序功能的 看看执行计划,最好多找几个版本看看(如果有现成的环境), 比如 2000 / 2008 / 2012 / 2017 这些版本。
lich2005 2020-05-18
  • 打赏
  • 举报
回复
group by 本来就没有排序功能,所以随机显示没毛病。 但有些情况会例外,比如你原来有些表的记录是按物理顺序排了序的(比如含有聚集索引的那种表),那么即使你只用 group by 去显示,其结果也会默认排序的。
删库到跑路 2020-05-18
  • 打赏
  • 举报
回复
引用 2 楼 卖水果的net 的回复:
这种结果是必然的。

楼主可以做这样的尝试,对比一下执行结果。
1、把 distinct去掉 ,看看实际的 order by 顺序是否和 group by 一致。
2、不去掉 disticnt ,把distinct 后的列 和group by 写成一样的,顺序也一样。

我没有使用order by 只有group by 为什么每次查询顺序不一样呢,group by 是不具备排序功能的,为什么这样会随机排序呢
删库到跑路 2020-05-18
  • 打赏
  • 举报
回复
引用 2 楼 卖水果的net 的回复:
这种结果是必然的。

楼主可以做这样的尝试,对比一下执行结果。
1、把 distinct去掉 ,看看实际的 order by 顺序是否和 group by 一致。
2、不去掉 disticnt ,把distinct 后的列 和group by 写成一样的,顺序也一样。

大哥,我想知道为啥是必然的的
卖水果的net 2020-05-17
  • 打赏
  • 举报
回复
这种结果是必然的。 楼主可以做这样的尝试,对比一下执行结果。 1、把 distinct去掉 ,看看实际的 order by 顺序是否和 group by 一致。 2、不去掉 disticnt ,把distinct 后的列 和group by 写成一样的,顺序也一样。
删库到跑路 2020-05-17
  • 打赏
  • 举报
回复
顶起来,求大佬解惑

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧