27

何らかの理由で、これは機能しません:

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

このエラーが発生します:

エラー1054(42S22):「where句」の不明な列「val」

それではどうすればよいですか?

4

4 に答える 4

36

ALIASまず、WHERE句で使用することはできません。あなたはコラムを使うべきです、

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

その理由は次のとおりです。操作の順序はSQLであり、

  • FROM句
  • WHERE句
  • GROUPBY句
  • HAVING句
  • SELECT句
  • ORDERBY句

句の前にある句でALIAS行われます。SELECTWHERE

エイリアスを本当に使用したい場合は、サブクエリでラップします。

SELECT *
FROM
    (
        SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
        FROM   users
    ) s
WHERE   val  = '15'
于 2013-01-19T11:31:11.020 に答える
7

確かにMySQLで可能です。以下を参照してください。これをテストしたところ、正常に動作します。

Select substring(rating, instr(rating,',') +1, +2) as val 
From users 
Having val = '15';

「valがnullである」などのこともできます。

ALIASではWHEREを使用できませんが、HAVINGを使用するとうまくいきます。

H

于 2020-09-17T11:03:41.103 に答える
3

val定義されていません、それは単なるエイリアスです。このようにしてください:

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15
于 2013-01-19T11:38:24.517 に答える
-2

このクエリを使用できます

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2)
FROM   users 
WHERE  SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
于 2018-11-20T09:49:56.337 に答える