为什么这个查询不起作用?
SELECT 10 AS my_num, my_num*5 AS another_number FROM table
在这个示例中,我试图在其他计算中使用 my _ num 别名,结果是未知列“ my _ num”
这是我正在尝试做的事情的一个简化版本,但基本上我想使用一个别名来进行其他计算。我的计算要复杂得多,这就是为什么我用不同的方式重复了好几次,所以最好使用别名。
您将需要使用一个子选择来以这种方式使用这个别名
SELECT my_num*5 AS another_number FROM ( SELECT 10 AS my_num FROM table ) x
Sql 中的别名与编程语言中的变量不同。别名只能在特定的位置再次引用(特别是在 GROUP BY和 HAVING子句中)。但是不能在 SELECT子句中重用别名。因此,您可以使用一个派生查询(如 Rubens Farias所建议的) ,它基本上允许您重命名列和/或命名任何计算列。
GROUP BY
HAVING
SELECT
或者,如果公式通常是固定的,则可以使用 VIEW
VIEW
CREATE VIEW table10 AS SELECT 10 AS my_num FROM table; SELECT my_num * 5 AS another_number FROM table10;
我相信这会比使用派生查询稍微快一点,但它可能在很大程度上取决于您的真实查询。
或者你可以直接复制这些工作:
SELECT 10 AS my_num, 10 * 5 AS another_number FROM table;
这在 php/perl 之类的程序中可能很方便:
my $my_num = 10; my $query = "SELECT $my_num AS my_num, $my_num * 5 AS another_number FROM table";
只需用 (SELECT alias)包装您重用的别名:
(SELECT alias)
SELECT 10 AS my_num, (SELECT my_num) * 5 AS another_number FROM table
“ 另一种选择是使用 APPY 操作符
SELECT my_num, my_num*5 AS another_number FROM table CROSS APPLY (SELECT 5 AS my_num) X