2013-01-19 10 views
12

でASを選択:MySQLの - これは動作しません何らかの理由でWHERE

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

は、このエラーを与える:ERROR 1054(42S22): 'where句'

どう

不明な列 'val' を私はそれをしますか?

+2

のようなそれ.doというそのわずかエイリアスを定義されていません自分自身が列の一部を処理する必要がある場合、スキーマは間違っています。 – paxdiablo

答えて

20

WHERE句では、最初にALIASを使用することはできません。あなたが列を使用することshoul次のように、

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

理由は、操作の順序はSQLで、

    FROM句
  • 句BY句
  • GROUP
  • HAVING節
  • SELECT句
  • ORDER BY claus

ALIAS電子はWHERE句の前にあるSELECT句で行われます。

あなたが本当にエイリアスを使用したい場合は、サブクエリでそれをラップし、

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

ありがとう!別名の考え方は、選択行を最小化することでした。あなたはそれをすることができない、少し奇妙です。しかし、ありがとう - 上記の作品は素晴らしいです。 – Martin

+0

教えてくれてありがとう;-) – Martin

+0

あなたは大丈夫です: 'D' –

2

valあなたが見つける_ever_た場合は、その

SELECT SUBSTRING(rating, INSTR(rating,',') +1, +2) AS val 
    FROM users 
    WHERE SUBSTRING(rating, INSTR(rating,',') +1, +2) = 15 
関連する問題