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

epggiuax  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(348)

例如,

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'

m3eecexj

m3eecexj1#

不能在主查询中直接使用需要在子查询中生成的别名列。
这种用法也可以作为一种替代方法:

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

e5nszbig2#

查询中表达式生成的列不能立即用于 WHERE 条款,尽管 GROUP BY , HAVING ,或 ORDER BY 条款。
如果需要在 WHERE 子句中,您需要将查询作为另一个查询的“表表达式”包含。
例如:

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

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

yyyllmsg

yyyllmsg3#

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

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

相关问题