web-dev-qa-db-fra.com

MySQL - SELECTIONNER COMME DANS OU

Pour une raison quelconque, cela ne fonctionne pas:

select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';

Cela donne cette erreur:

ERREUR 1054 (42S22): colonne inconnue 'val' dans 'où clause'

Comment puis-je le faire alors?

14
Martin

Tout d'abord, vous ne pouvez pas utiliser ALIAS sur la clause WHERE. Vous devriez utiliser la colonne,

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'

La raison est la suivante: l'ordre des opérations est SQL,

  • Clause FROM
  • Clause WHERE
  • Clause GROUP BY
  • Clause HAVING
  • Clause SELECT
  • Clause ORDER BY

la ALIAS a lieu sur la clause SELECT qui est avant la clause WHERE.

si vous voulez vraiment utiliser le pseudonyme, enveloppez-le dans une sous-requête,

SELECT *
FROM
    (
        SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
        FROM   users
    ) s
WHERE   val  = '15'
26
John Woo

val n'est pas défini, c'est juste un alias. Fais-le comme ça:

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15
3
echo_Me

Vous pouvez utiliser cette requête

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2)
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
0
刘娓娓