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

uj5u.com熱心網友回復:
頂起來,求大佬解惑
uj5u.com熱心網友回復:
這種結果是必然的。樓主可以做這樣的嘗試,對比一下執行結果。
1、把 distinct去掉 ,看看實際的 order by 順序是否和 group by 一致。
2、不去掉 disticnt ,把distinct 后的列 和group by 寫成一樣的,順序也一樣。
uj5u.com熱心網友回復:
大哥,我想知道為啥是必然的的
uj5u.com熱心網友回復:
我沒有使用order by 只有group by 為什么每次查詢順序不一樣呢,group by 是不具備排序功能的,為什么這樣會隨機排序呢
uj5u.com熱心網友回復:
group by 本來就沒有排序功能,所以隨機顯示沒毛病。但有些情況會例外,比如你原來有些表的記錄是按物理順序排了序的(比如含有聚集索引的那種表),那么即使你只用 group by 去顯示,其結果也會默認排序的。
uj5u.com熱心網友回復:
group by 本來就沒有排序功能group by 是不具備排序功能的
看看執行計劃,最好多找幾個版本看看(如果有現成的環境), 比如 2000 / 2008 / 2012 / 2017 這些版本。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/31207.html
標籤:疑難問題
下一篇:IDEA中匯入JDBC包的問題
