/ / Prípad MySQL - neznámy stĺpec, v ktorom - mysql, sql, case

Prípad MySQL - Neznámy stĺpec v ktorom - mysql, sql, case

Mám problém s mojím dopytom, čo sa deje?

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

Zobrazila sa mi táto chyba: # 1054 - Neznámy stĺpec „id_ranking“ v časti „where Klauzule“

Ďakujem!

odpovede:

4 pre odpoveď č. 1

Je to preto, že VYBERTE výsledok prípravy (ako id_ranking) PO CELOM, KDE sa volalo.

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;

Takto to funguje (poradie):

  1. FROM
  2. Klauzula WHERE
  3. Doložka GROUP BY
  4. HAVING doložka
  5. Klauzula SELECT
  6. Doložka ORDER BY

3 pre odpoveď č. 2

Aliasy nie sú povolené v where, Zmeňte dotaz na jeden

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)

alebo

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 pre odpoveď č. 3

Namiesto toho môžete použiť alias v klauzule 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