无法访问Select语句中的别名列(MySQL)

时间:2014-01-04 15:57:01

标签: mysql sql select alias

MySQL中的别名列存在问题! 我的查询:

SELECT Price AS Pr, (Pr*10/100) FROM MyTable;

MySQL WorkBench错误:字段列表中未知列'Pr' !!!

我在W3Schools中测试了我的查询,没有错误!

2 个答案:

答案 0 :(得分:1)

  

我在W3Schools中测试了我的查询,没有错误!

这并不能证明您的查询有效。

您只能在GROUP BYORDER BYHAVING条款中使用别名。不允许使用您的使用变体,因为当MySQL选择第2列时,别名的值是未知的。

答案 1 :(得分:0)

我怀疑W3Schools使用MS Access来运行用户查询,而MS Access确实允许这样的攻击,如在同一SELECT子句中定义的SELECT子句中引用列别名。

标准不允许这样做,MySQL在这种特殊情况下确实遵循标准。

至于问题的解决方案,我可以看到两个选项。

可能在任何SQL产品中运行的更通用的解决方案是使用派生表:

SELECT
  Pr,
  (Pr * 10 / 100) AS SomethingElse
FROM
  (
    SELECT
      SomeComplexExpression AS Pr
    FROM MyTable
  ) AS sub
;

另一种选择是使用一个特定于MySQL的变量:

SELECT
  @Pr := SomeComplexExpression AS Pr,
  (@Pr * 10 / 100) AS SomethingElse
FROM MyTable
;

最后,如果您需要测试/演示某些内容是否可以在MySQL中运行,我建议使用SQL Fiddle

相关问题