如何在WHERE子句中使用别名?

时间:2019-05-19 19:50:33

标签: sql alias

一个简单的问题:如何在SELECT语句后使用别名?假设我有这样的查询:

SELECT salary/12 AS sal 
FROM sdatabase
WHERE sal > 1000

当然它将无法正常工作,因为数据库会向我抛出错误。我知道我可以像这样将sal替换为salary/12

WHERE salary/12 > 1000

但是我认为它不太可读。那么,我能做些什么吗?或者这只是完成的方式?

5 个答案:

答案 0 :(得分:4)

将原始查询包装为派生表(子查询):

select *
from
(
    SELECT salary/12 AS sal
    FROM sdatabase
) dt
WHERE sal > 1000

答案 1 :(得分:0)

从时间上看,您的别名在“ WHERE”中不可用,因此您需要一个subQuery来实现此目的...

SELECT * FROM 
( SELECT salary/12 AS sal FROM sdatabase ) 
sq WHERE sal > 1000

答案 2 :(得分:0)

逻辑上,WHERE子句在SELECT之前计算。这就是为什么您不能使用sal中的列WHERE的原因。这与其他语言从上到下执行的语言不同。简化的订单如下所示:

  1. 加入
  2. 在哪里
  3. 拥有
  4. 选择
  5. DISTINCT
  6. ORDER BY

您可以通过在浏览器中输入logical query processing来找到有关它的更多信息。

答案 3 :(得分:0)

您可以尝试使用通用表表达式(CTE)-

WITH cte AS
(SELECT salary/12 AS sal 
FROM sdatabase
WHERE sal > 1000)

SELECT * 
FROM cte
WHERE sal > 1000

答案 4 :(得分:0)

如果您正在学习如何在WHERE语句中使用别名,那么@Jarlh的解决方案很好,但实际上,直接使用以下过滤条件更有意义。这排除了使用具有相同结果的子查询。

SELECT salary/12 AS sal 
FROM sdatabase
WHERE salary > 12000