我有一个类似的查询:
SELECT DISTINCT UPPER(LEFT(title, 1)) as title
FROM <table_name>
ORDER BY LEFT(title, 1);
失败,错误
#3065 - ORDER BY子句的表达式#1不在SELECT列表中,引用列'title'不在SELECT列表中;这与DISTINCT
不兼容
在按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
答案 0 :(得分: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);