若SQL语句中的ORDER BY短语中指定了多个字段,则( )。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了若SQL语句中的ORDER BY短语中指定了多个字段,则( )。相关的知识,希望对你有一定的参考价值。
A)依次按自右至左的字段顺序排序 B)只按第一个字段排序
C)依次按自左至右的字段顺序排序 D)无法排序
order by的排序是从左到右的.
所以要选C 参考技术A C 如果每个排序字段不声明,则默认升序排列 参考技术B 用逗号隔开 C 参考技术C 先按第一个排,以此类推 参考技术D c
如果在 select 中指定了大写,则 Order by 子句失败
【中文标题】如果在 select 中指定了大写,则 Order by 子句失败【英文标题】:Order by clause fails if upper case specified in select 【发布时间】:2016-11-15 23:54:04 【问题描述】:我有一个类似的查询:
SELECT DISTINCT UPPER(LEFT(title, 1)) as title
FROM <table_name>
ORDER BY LEFT(title, 1);
失败并出现错误
#3065 - ORDER BY 子句的表达式 #1 不在 SELECT 列表中,引用列 'title' 不在 SELECT 列表中;这与 DISTINCT 不兼容
当使用 UPPER 按顺序按 ORDER BY UPPER(LEFT(title, 1));
时,这可以正常工作
我想知道为什么它之前会失败,因为默认情况下 order by 不区分大小写我猜这里提到http://dev.mysql.com/doc/refman/5.7/en/sorting-rows.html
我在 MySQL 5.7+ 上启用了所有默认 sql_modes
【问题讨论】:
【参考方案1】:我认为错误信息很清楚。出现错误是因为title
可以引用表中的列或列别名。搜索首先查找该列,因此查询被解释为:
SELECT DISTINCT UPPER(LEFT(t.title, 1)) as title
FROM <table_name> t
ORDER BY LEFT(t.title, 1);
我认为您可以通过使用不同的别名来解决此问题:
SELECT DISTINCT UPPER(LEFT(t.title, 1)) as new_title
FROM <table_name> t
ORDER BY LEFT(new_title, 1);
【讨论】:
是的,这行得通,但是如果我在上面的查询中有不同的别名(比如说title_alias
) - 它会失败:(。我仍然必须在我的订单子句中提到UPPER(LEFT(title, 1))
. 我能知道为什么这不适用于LEFT(title, 1)
别名不同的原因吗?
is order by 与 select 语句中选择的案例有关?
@jitendrapurohit 。 . .我想我用别名解释了这个问题——它与列名混淆了,列名优先。以上是关于若SQL语句中的ORDER BY短语中指定了多个字段,则( )。的主要内容,如果未能解决你的问题,请参考以下文章