/ / MySQL Case Statement - Colonne inconnue dans where - mysql, sql, case

MySQL Case Statement - Colonne inconnue dans where - mysql, sql, case

J'ai un problème avec ma requête, qu'est-ce qui ne va pas?

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);

Je reçois cette erreur: # 1054 - Colonne inconnue "id_ranking" dans "où clause"

Je vous remercie!

Réponses:

4 pour la réponse № 1

C’est parce que SELECT prépare le résultat (sous la forme id_ranking) APRÈS que WHERE ait été appelé.

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;

Voici comment cela fonctionne (ordre):

  1. Clause FROM
  2. Clause WHERE
  3. Clause GROUP BY
  4. Clause AYANT
  5. Clause SELECT
  6. Clause ORDER BY

3 pour la réponse № 2

Les alias ne sont pas autorisés dans where. Changer la requête en soit

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)

ou

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)

0 pour la réponse № 3

Vous ne pouvez pas utiliser un alias dans la clause where, essayez plutôt

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