例如,
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'
答案 0 :(得分:1)
您不能直接在主查询中使用需要在子查询中生成的别名列。
这种用法也可以替代:
SELECT cost,
price - (SELECT MIN(cost) FROM stock) AS cost_diff
FROM stock
答案 1 :(得分:1)
由查询中的表达式产生的列虽然不能立即用于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
您可以使用此策略为需要进一步组合到其他复杂公式/表达式中的复杂表达式生成命名列。
答案 2 :(得分:1)
您需要编写表达式,别名将无法识别
SELECT
cost,
(SELECT MIN(cost) FROM stock) AS min_cost,
price - (SELECT MIN(cost) FROM stock)
FROM stock