对已排序视图执行Order By时应保留原排序列为次要排序键
解决方法
直接查询时指定排序(推荐)
不用修改原视图,每次查询cars视图时直接显式指定排序规则,将type作为主排序字段,name作为次要排序字段即可:
SELECT * FROM cars ORDER BY type, name;
这样返回的结果会先按type分组排序,同一type下再按name排序,完全满足你的需求。
修改视图默认排序规则
如果希望每次查询cars视图时,默认就按type优先、name次之的规则排序,可以修改视图的定义:
CREATE OR REPLACE VIEW cars AS SELECT * FROM car ORDER BY type, name;
注意:不同数据库的视图修改语法略有差异,比如SQL Server使用ALTER VIEW,Oracle支持上述CREATE OR REPLACE VIEW语法,请根据你使用的数据库类型调整。
补充说明
原视图中的ORDER BY name在多数数据库中,若未配合LIMIT/TOP等限制行数的子句,其实不会对最终查询结果的排序产生固定作用——因为视图本质是封装的查询逻辑,查询视图时指定的ORDER BY会直接覆盖视图定义里的排序规则。因此直接在查询时指定排序是最灵活且可靠的方式。
内容的提问来源于stack exchange,提问作者user2316219
相关产品推荐
相关产品推荐

