理解查询中 order by 的行为

问题描述 投票:0回答:1

我的目标是选择没有老板或老板住在包含字母“o”或字母“u”的街道上的员工的全名。然后,我想按全名降序列出它们。 问题出在排序上,因为通过我认为相同的查询,我得到了不同的答案。

当我在 MySQL Workbench 中引入以下命令时:

select concat(surnames,', ',name) as 'Full Name', street
from employee
where boss is null or (boss is not null and (street like'%u%' or steet like '%o%'))
order by concat(surnames,', ',name) desc;

通过这个命令我得到了我想要的答案,那就是:

Full Name              Street
Suárez García, Juan Juan Valdés 25
Sarasola Goñi, Vanesa   Austria
Requena Santos, Pilar   Alicante 3
Puertas Elorza, Marta   Lope de Vega 3
Piedra Trujillo, Ramón  Madre Vedruna 21
Narváez Alonso, Alba    Vara de Rey 22
Gómez de la Sierra, Francisco   Loscertales 9
Chávarri Díez, Lorea    
Arrieta Alcorta, Kepa   Urbieta 33
Álvarez González, Ana   Graus 19

但是当我改变另一个对我来说看起来相同的顺序时:

select concat(surnames,', ',name) as 'Full Name', street
from employee
where boss is null or (boss is not null and (street like'%u%' or steet like '%o%'))
order by 'FullName' desc;

我得到了一个错误的答案,看起来像:

Full Name               Street
Suárez García, Juan Juan Valdés 25
Puertas Elorza, Marta   Lope de Vega 3
Chávarri Díez, Lorea    
Narváez Alonso, Alba    Vara de Rey 22
Gómez de la Sierra, Francisco   Loscertales 9
Piedra Trujillo, Ramón  Madre Vedruna 21
Sarasola Goñi, Vanesa   Austria
Requena Santos, Pilar   Alicante 3
Álvarez González, Ana   Graus 19
Arrieta Alcorta, Kepa   Urbieta 33

有人可以告诉我这是怎么回事吗?

sql mysql database indexing sql-order-by
1个回答
0
投票

定义别名时,可以使用单引号,就像它是字符串文字一样,也可以使用反引号,就像它是标识符一样。但是,当您稍后在查询中引用别名时,必须将其视为标识符。

order by 'FullName' desc;

这按常量字符串值

'FullName'
排序,而不是别名。

如果您想引用标识符,请使用反引号:

order by `FullName` desc;

手册中的此页面讨论了这种差异:https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html

© www.soinside.com 2019 - 2024. All rights reserved.