MySQL - 在WHERE中选择AS

时间:2013-01-19 11:30:14

标签: mysql sql select

出于某种原因,这不起作用:

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

它给出了这个错误:

  

ERROR 1054(42S22):'where子句'

中的未知列'val'

我该怎么办呢?

4 个答案:

答案 0 :(得分:26)

首先,您不能在ALIAS子句中使用WHERE。你应该使用专栏,

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

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

  • FROM clause
  • 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'

答案 1 :(得分:3)

val未定义,它只是一个别名。这样做:

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

答案 2 :(得分:2)

您肯定可以使用MySQL,请参见下面的内容,对其进行了测试,并且效果很好:

Select substring(rating, instr(rating,',') +1, +2) as val 
From users 
Having val = '15';

您还可以执行诸如“具有val为null”之类的事情。

使用ALIAS不能使用WHERE,但是使用HAVING可以解决问题。

H

答案 3 :(得分:0)

您可以使用此查询

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