我知道我可以为列分配临时别名。例如:
select foo, length(foo) as bar from my_table
我知道我可以使用这些别名来获取它们的值:
select foo, length(foo) as bar from my_table order by bar asc
但有时候我想让查询结果更具可读性,当别名中有空格时,我不能在查询的其余部分使用它的值:
select foo, length(foo) as "Foo's length" from my_table order by ? asc
有没有办法为查询定义一个别名和一个别名,这将在结果中看到?
答案 0 :(得分:1)
为什么这不起作用:
select foo, length(foo) as `Foo's length`
from my_table
order by `Foo's length` asc;
或者,使用带有列引用的旧式order by
:
select foo, length(foo) as `Foo's length`
from my_table
order by 2 asc;
或者,重复表达式:
select foo, length(foo) as `Foo's length`
from my_table
order by length(foo) asc;
答案 1 :(得分:1)
使用此
select foo, length(foo) as "Foo's length" from my_table order by 2 asc
在order by 2
2中是列索引
答案 2 :(得分:1)
它不起作用的原因是MySQL对于双引号意味着什么有点精神分裂。有时它表示字符串文字,有时它表示列别名。
当您编写查询时;
select foo, length(foo) as "Foo's length"
from my_table order by "Foo's length" asc
...它实际上会创建一个名为Foo's length
的列别名,但是按排序字符串文字 Foo's length
。由于字符串文字对于所有行都是相同的,因此排序将是伪随机的。
你需要做的就是用反引号一致引用你的别名,事情会很好用;
select foo, length(foo) as `Foo's length`
from my_table order by `Foo's length` asc