27

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

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

它给出了这个错误:

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

那我该怎么做呢?

4

4 回答 4

36

首先,您不能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 子句
  • 选择子句
  • ORDER BY 子句

发生ALIAS在该SELECT子句之前的WHERE子句上。

如果您真的想使用别名,请将其包装在子查询中,

SELECT *
FROM
    (
        SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
        FROM   users
    ) s
WHERE   val  = '15'
于 2013-01-19T11:31:11.020 回答
7

你肯定可以用 MySQL,请看下面,刚刚测试过,它工作正常:

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

您还可以执行“让 val 为空”等操作。

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

H

于 2020-09-17T11:03:41.103 回答
3

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

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15
于 2013-01-19T11:38:24.517 回答
-2

您可以使用此查询

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2)
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
于 2018-11-20T09:49:56.337 回答