今天,在与我的 friend Dumisani Ndubane 进行的现场学习类(class)中,我们发现使用 ORDER BY 通过使用 ``、'' 或 ""引用类型对带有列别名的结果集进行排序时,行为发生了细微的变化.
'' 和 ""不受排序影响,只有 `` 有效,但所有引号都允许进行列别名。请参阅下面的查询;
- 这按升序对全名进行排序(在列别名上使用``引号):
SELECT
CONCAT_WS(', ', lastName, firstname) `Full name`
FROM
employees
ORDER BY
`Full name`;
- 这不会对结果集进行排序。请注意,我们使用了 '' 引号
SELECT
CONCAT_WS(', ', lastName, firstname) 'Full name'
FROM
employees
ORDER BY
'Full name';
- 这不会对结果集进行排序。请注意,我们使用了“”引号
SELECT
CONCAT_WS(', ', lastName, firstname) "Full name"
FROM
employees
ORDER BY
"Full name";
此外,我们在 Mac 上使用 MySQL 版本 mysql Ver 8.0.19 for osx10.13 on x86_64 (Homebrew)
。这是故意的吗?对此行为有解释吗?另外,为什么不坚持对 MySQL 标识符使用反引号 (``),对字符串文字使用 '' 或 ""。为什么要混合它们?
我认为这可能是 MySQL 的用户体验 (UX) 改进,因为当前的现状对于试图学习的新手来说似乎很困惑。
SO 社区有何想法,并提前感谢您的帮助。
最佳答案
单引号(在 MySQL 中,双引号)代表文字字符串。所以 'Full name'
就是这样:一个文字字符串。使用它进行排序是没有意义的,因为该值对于所有行都是恒定的:因此,行的顺序是未定义,这意味着数据库可以自由地以其喜欢的任何顺序返回行。
相反,请使用用于标识符的反引号,因此 order by
引用 select
子句中的表达式别名。
或者更好的是,使用不需要引号的别名,这样您就不必担心这一切。
关于mysql - 为什么在 MySQL 中使用 '' 或 ""不能通过 ORDER BY 对列别名进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467696/