MySQL - 在WHERE中选择AS

Mar*_*tin 16 mysql sql select

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

select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';
Run Code Online (Sandbox Code Playgroud)

它给出了这个错误:

ERROR 1054(42S22):'where子句'中的未知列'val'

那我该怎么办?

Joh*_*Woo 26

首先,你不能ALIASWHERE条款上使用.你应该使用这个专栏,

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
Run Code Online (Sandbox Code Playgroud)

原因如下:操作顺序是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'
Run Code Online (Sandbox Code Playgroud)

  • 考虑到可以在`GROUP BY`,`HAVING`和`ORDER BY`子句中使用列别名,解释并不完全有意义. (7认同)

Hei*_*ati 10

你肯定可以使用MySQL,请看下面,刚刚测试过,它工作得很好:

Select substring(rating, instr(rating,',') +1, +2) as val 
From users 
Having val = '15';
Run Code Online (Sandbox Code Playgroud)

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

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

H