出于某种原因,这不起作用:
select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';
它给出了这个错误:
ERROR 1054(42S22):'where子句'
中的未知列'val'
我该怎么办呢?
答案 0 :(得分:26)
首先,您不能在ALIAS
子句中使用WHERE
。你应该使用专栏,
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
原因如下:操作顺序是SQL,
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'