一尘不染

MySQL-在何处选择AS

mysql

由于某些原因,这不起作用:

select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';

它给出了这个错误:

错误1054(42S22):“ where子句”中的未知列“ val”

那我该怎么办呢?


阅读 344

收藏
2020-05-17

共1个答案

一尘不染

首先,您不能ALIASWHERE子句上使用。您应该使用该列,

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'

原因如下:操作顺序为SQL,

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY子句

ALIAS需要的地方SELECT也就是前子句WHERE子句。

如果您确实要使用别名,请将其包装在子查询中,

SELECT *
FROM
    (
        SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
        FROM   users
    ) s
WHERE   val  = '15'
2020-05-17