2016-07-01 48 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个值。** –