由于某种原因,这不起作用:
select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';
它给出了这个错误:
错误 1054 (42S22):“where 子句”中的未知列“val”
那我该怎么做呢?
首先,您不能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'
你肯定可以用 MySQL,请看下面,刚刚测试过,它工作正常:
Select substring(rating, instr(rating,',') +1, +2) as val
From users
Having val = '15';
您还可以执行“让 val 为空”等操作。
使用 ALIAS 不能使用 WHERE,但使用 HAVING 可以解决问题。
H
val
没有定义,它只是一个别名。像这样做:
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15
您可以使用此查询
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2)
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'