一个简单的问题:如何在SELECT语句后使用别名?假设我有这样的查询:
SELECT salary/12 AS sal
FROM sdatabase
WHERE sal > 1000
当然它将无法正常工作,因为数据库会向我抛出错误。我知道我可以像这样将sal
替换为salary/12
:
WHERE salary/12 > 1000
但是我认为它不太可读。那么,我能做些什么吗?或者这只是完成的方式?
答案 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
的原因。这与其他语言从上到下执行的语言不同。简化的订单如下所示:
您可以通过在浏览器中输入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