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)