我需要设置一个默认订单列,然后可以提供另一个订单列作为参数来适应用户首选项。但是,我设置为默认的列也有可能被用户选择。那么这样的情况下,是否能够成功应用来匹配用户的选择呢?这是例子:
SELECT id, name, code, age, create_time FROM data_table
order by create_time asc, create_time desc
这样的话,查询结果会按照‘create_time’列升序还是降序排序?
我想知道这种情况下的实际结果,否则输出将是错误的。其实我在Navicat中测试过,它按预期排序上升,但我不知道为什么。
order by 接受任意表达式,而不仅仅是列,行的顺序由最左边的顺序表达式确定,但有差异。不要求一列只能在一个表达式中使用。在您的情况下,它们将按升序排序;仅当比较的两行的 create_time 相等时才会计算降序表达式,在这种情况下没有区别。
如果两行的 create_time 相同,则返回它们的顺序是未定义的,甚至可能因一个查询而异。
我建议始终按列进行足够的排序,以明确确定顺序;在这种情况下,添加额外的 order by 表达式来区分任意两行(例如,如果 id 是唯一标识符)。