ORDER BY 查询给出两个不同的输出
ORDER BY query giving two different outputs
我有一个学生 table 在 [姓名、地址、TotalFees] 列中有 8 条记录。
即使我在单个 table 上执行两个相同的 ORDER BY
查询,我也会得到两个不同的输出。我附上了下面的截图。
相同 table 的相同查询具有不同的输出:
您遇到的问题是 order by
的键没有唯一地定义每一行。特别是,"khar" 对大多数行重复(您的结果表明您使用的是不区分大小写的排序规则)。
在SQL 数据库中,排序不稳定。稳定排序是使用相同键保留值的原始排序的排序。因为排序不稳定,结果 - 对于相同的键 - 可以以任何顺序出现。
为什么排序不稳定?回想起来这很容易。 SQL 表和结果集表示 无序 集。没有初始排序,排序不稳定
解决此问题的正常方法是在 order by
中包含一个唯一 ID 作为最终键:order by address, id
。但是,对于您的数据,不清楚唯一键是什么。
地址和姓名的组合不会产生重复,所以您可以试试这个,
select *From student
order by address,name
select top 3 * From student
order by address,name
我有一个学生 table 在 [姓名、地址、TotalFees] 列中有 8 条记录。
即使我在单个 table 上执行两个相同的 ORDER BY
查询,我也会得到两个不同的输出。我附上了下面的截图。
相同 table 的相同查询具有不同的输出:
您遇到的问题是 order by
的键没有唯一地定义每一行。特别是,"khar" 对大多数行重复(您的结果表明您使用的是不区分大小写的排序规则)。
在SQL 数据库中,排序不稳定。稳定排序是使用相同键保留值的原始排序的排序。因为排序不稳定,结果 - 对于相同的键 - 可以以任何顺序出现。
为什么排序不稳定?回想起来这很容易。 SQL 表和结果集表示 无序 集。没有初始排序,排序不稳定
解决此问题的正常方法是在 order by
中包含一个唯一 ID 作为最终键:order by address, id
。但是,对于您的数据,不清楚唯一键是什么。
地址和姓名的组合不会产生重复,所以您可以试试这个,
select *From student
order by address,name
select top 3 * From student
order by address,name