select语句中无法识别标量子查询的别名

时间:2020-07-22 13:51:52

标签: mysql sql

例如,

SELECT 
    cost, 
    (SELECT MIN(cost) FROM stock) AS min_cost, 
    price - min_cost
FROM stock

执行此sql语句时,出现以下错误。是什么原因?

ERROR 1054 (42S22) at line 1: Unknown column 'min_cost' in 'field list'

3 个答案:

答案 0 :(得分:1)

您不能直接在主查询中使用需要在子查询中生成的别名列。

这种用法也可以替代:

SELECT cost, 
       price - (SELECT MIN(cost) FROM stock) AS cost_diff
  FROM stock

答案 1 :(得分:1)

由查询中的表达式产生的列虽然不能立即用于WHEREGROUP BYHAVING子句,但ORDER BY子句并不是立即可用的

如果您需要在WHERE子句中使用以命名的表达式,则需要将查询作为另一个查询的“表表达式”来包含。

例如:

select
  *,
  price - min_cost
from (
  SELECT 
    cost, 
    (SELECT MIN(cost) FROM stock) AS min_cost
  FROM stock
) x

您可以使用此策略为需要进一步组合到其他复杂公式/表​​达式中的复杂表达式生成命名列。

答案 2 :(得分:1)

您需要编写表达式,别名将无法识别

SELECT 
    cost, 
    (SELECT MIN(cost) FROM stock) AS min_cost, 
    price - (SELECT MIN(cost) FROM stock)
FROM stock