gpt4 book ai didi

mysql - 别名在 ORDER BY 子句中不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 12:35:54 25 4
gpt4 key购买 nike

这在 MySQL 5 中可以正常工作:

SELECT INSTR(foo, 'Bar') as foobar
FROM Table
ORDER BY CASE WHEN foobar = 1 THEN foo END DESC;

在 MySQL 4 中,我得到错误:

ERROR 1054 (42S22): Unknown column 'foobar' in 'order clause'

但是,如果我将子句更改为此,它将适用于两个版本:

SELECT INSTR(foo, 'Bar') as foobar
FROM Table
ORDER BY CASE WHEN INSTR(foo, 'Bar') = 1 THEN foo END DESC;

为了确保兼容性,我是否必须始终使用第二种方式?

最佳答案

基本上您不能在同一“查询级别”重复使用列别名。

如果您想编写兼容/可移植的 SQL 并且不想重复函数调用,那么通常的做法是将查询包装到派生表中。

select *
from (
SELECT INSTR(foo, 'Bar') as foobar,
foo
FROM Table
) t
ORDER BY CASE WHEN foobar = 1 THEN foo END DESC;

请注意,您需要在内部查询中包含要在“外部”查询中使用的任何列。如果您在内部派生表中省略列 foo,则您可以在外部级别访问它。

关于mysql - 别名在 ORDER BY 子句中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13231167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com