MySQL Case语句-where中的未知列

MySQL Case语句-where中的未知列,mysql,sql,case,Mysql,Sql,Case,我的疑问有问题,怎么了 SELECT CASE WHEN cp_pessoa.score < 100 THEN 1 WHEN cp_pessoa.score < 300 THEN 2 WHEN cp_pessoa.score >= 300 THEN 3 END as id_ranking FROM cp_pessoa WHERE id_ranking IN (1,2); 我得到了这个错误:10

我的疑问有问题,怎么了

SELECT 
    CASE 
        WHEN cp_pessoa.score < 100 THEN 1 
        WHEN cp_pessoa.score < 300 THEN 2 
        WHEN cp_pessoa.score >= 300 THEN 3 
    END as id_ranking
FROM cp_pessoa 
    WHERE id_ranking IN (1,2);
我得到了这个错误:1054-where子句中的未知列“id_ranking”


谢谢大家!

这是因为选择prepare result作为id\u排名,而不是调用WHERE

SELECT 
    CASE 
    WHEN cp_pessoa.score < 100 THEN 1 
    WHEN cp_pessoa.score < 300 THEN 2 
    WHEN cp_pessoa.score >= 300 THEN 3 
END as id_ranking
FROM cp_pessoa 
WHERE cp_pessoa.score < 300;
这就是它的工作原理:

FROM子句 WHERE子句 分组依据子句 有从句 SELECT子句 按条款订货
您不能在where子句中使用别名,请尝试

SELECT 
CASE 
    WHEN cp_pessoa.score < 100 THEN 1 
    WHEN cp_pessoa.score < 300 THEN 2 
    WHEN cp_pessoa.score >= 300 THEN 3 
END as id_ranking
FROM cp_pessoa 
WHERE cp_pessoa.score < 300

where中不允许使用别名。将查询更改为

SELECT * FROM 
(
SELECT 
    CASE 
        WHEN cp_pessoa.score < 100 THEN 1 
        WHEN cp_pessoa.score < 300 THEN 2 
        WHEN cp_pessoa.score >= 300 THEN 3 
    END as id_ranking
FROM cp_pessoa 
)a 
WHERE id_ranking IN (1,2)


哪里看不到别名。没有其他方法来解析?工件id_ranking1,2是可变的。这是一个很好的标准方法,但你可以用许多其他方法得到一个结果。例如,您可以在WHERE子句中重复您的案例,或者选择到另一个表中,然后使用当前的子句2查询。但是你真的需要这个吗?你在任何地方都能工作,因为1,2和3总是<300@BaBL86:正确,正在修复
SELECT 
    CASE 
        WHEN cp_pessoa.score < 100 THEN 1 
        WHEN cp_pessoa.score < 300 THEN 2 
        WHEN cp_pessoa.score >= 300 THEN 3 
    END as id_ranking
FROM cp_pessoa 
WHERE 
  CASE 
        WHEN cp_pessoa.score < 100 THEN 1 
        WHEN cp_pessoa.score < 300 THEN 2 
        WHEN cp_pessoa.score >= 300 THEN 3 
    END IN (1,2)