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

当我在MySQL工作台中引入以下命令时:

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

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

推荐答案

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

order by 'FullName' desc;

这是按常量字符串值'FullName'而不是别名排序的.按常量值或表达式排序会使每一行与每一其他行绑定,并且结果顺序是未定义的.

如果您想引用identifier,请使用反勾号:

order by `FullName` desc;

通过使用标识符,顺序是按每个相应行的命名列的values排列,这将为您提供所需的顺序.

手册中的这一页谈到了这一区别:https://dev.mysql.com/doc/refman/8.0/en/problems-with-alias.html

Mysql相关问答推荐

如何改进对另一个表中多行的查询依赖性

JOOQ-如何在一个查询中引用多个(但不是所有)表中的所有字段

在联合查询中使用GROUP BY和ORDER BY

如何在产品查询中插入GROUP_CONCAT?

MySQL-如何检测时间戳中的一天

提高bash脚本从大型gml文件读取数据的效率

查询优化并提高性能

SQL 请求:REPLACE 和通配符 %.如何做正确的事?

外部磁盘上的MySQL表空间和数据文件

模拟Mysql Cursor类的fetchone()方法,并将其返回值设置为None

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

在 SQL 中 for each 组返回具有最大值的行,包括具有相同值的行

如何在 SQL 中的一行中查找最小值和最大值?

Laravel $q->where() 日期之间

Python MYSQL 更新语句

用于国际和多语言目的的数据库建模

在 MySQL 中重命名外键列

我的 PDO 声明不起作用

在mysql中复制没有数据的数据库 struct (带有空表)

如何让mysql自动启动? (仅限 linux-cli)