2016-07-01 76 views
0

我有一個學生表,其中8個記錄列[name,address,TotalFees]。ORDER BY查詢給出兩個不同的輸出

即使我在單個表上執行兩個相同的ORDER BY查詢,我會得到兩個不同的輸出。我附上了下面的截圖。不同的輸出在同一個表

相同的查詢:

enter image description here

+5

他們兩人正在產生結果與*您*已經在'ORDER BY'要求的保證是一致的。如果您需要更強大的保證,*您*必須通過向該'ORDER BY'添加額外的列或表達式來請求他們。 –

+0

這是一個非常好的例子,有絕對沒有隱式排序順序**每個調用可能會返回一個不同的順序,只要您的ORDER BY的列在它們的組合值中不是UNIQUE。 – Shnugo

+0

......你的問題是什麼? – Thinkeye

回答

2

,你必須是爲order by密鑰不唯一定義每一行的問題。特別是,大多數行重複「khar」(您的結果表明您正在使用不區分大小寫的整理)。

在SQL數據庫中,排序不穩定。穩定的排序是使用相同的鍵保留原始值的排序。由於排序不穩定,對於相同的密鑰,結果可以按任何順序排列。

爲什麼排序不穩定?回想起來很容易。 SQL表和結果集表示無序集。沒有初始排序,所以排序不穩定。

解決此問題的常規方法是在order byorder by address, id中包含一個唯一的ID作爲最終密鑰。然而,用你的數據,目前還不清楚這個獨特的關鍵是什麼。

+0

**但我唯一擔心的是,爲什麼第二個輸出表中的#3rd結果發生變化時,我想只反映第一個輸出表中的前3個值。** –

+0

@NiKhilKutewalla。 。 。因爲'by by'具有鍵的重複值,所以每次運行時都會產生不同的結果。我認爲這解釋了發生的事情。 –

0

組合地址和名稱不會產生重複,那麼你可以試試這個,

select *From student 
order by address,name 

select top 3 * From student 
order by address,name 
+0

**但我唯一擔心的是,爲什麼第二個輸出表中#3rd結果發生變化時,我只想從第一個輸出表反映出前3個值。** –