何らかの理由で、これは機能しません:
select substring(rating, instr(rating,',') +1, +2) as val
from users where val = '15';
このエラーが発生します:
エラー1054(42S22):「where句」の不明な列「val」
それではどうすればよいですか?
ALIAS
まず、WHERE
句で使用することはできません。あなたはコラムを使うべきです、
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'
その理由は次のとおりです。操作の順序はSQLであり、
句の前にある句でALIAS
行われます。SELECT
WHERE
エイリアスを本当に使用したい場合は、サブクエリでラップします。
SELECT *
FROM
(
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val
FROM users
) s
WHERE val = '15'
確かにMySQLで可能です。以下を参照してください。これをテストしたところ、正常に動作します。
Select substring(rating, instr(rating,',') +1, +2) as val
From users
Having val = '15';
「valがnullである」などのこともできます。
ALIASではWHEREを使用できませんが、HAVINGを使用するとうまくいきます。
H
val
定義されていません、それは単なるエイリアスです。このようにしてください:
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15
このクエリを使用できます
SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2)
FROM users
WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = '15'