webentwicklung-frage-antwort-db.com.de

MySQL - SELECT AS in WO

Aus irgendeinem Grund funktioniert das nicht:

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

Es gibt diesen Fehler:

FEHLER 1054 (42S22): Unbekannte Spalte 'val' in 'where-Klausel'

Wie mache ich das dann?

14
Martin

Erstens können Sie ALIAS nicht für die WHERE-Klausel verwenden. Sie sollten die Spalte verwenden,

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

Der Grund ist wie folgt: Die Reihenfolge der Operationen ist SQL,

  • FROM-Klausel
  • WHERE-Klausel
  • GROUP BY-Klausel
  • HAVING-Klausel
  • SELECT-Klausel
  • ORDER BY-Klausel

die Variable ALIAS findet in der Klausel SELECT statt, die vor der Variable WHERE liegt.

wenn Sie den Alias ​​wirklich verwenden möchten, wickeln Sie ihn in eine Unterabfrage ein.

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

val ist nicht definiert, es handelt sich lediglich um einen Alias. Mach es so:

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

Sie können diese Abfrage verwenden

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