2013-01-19 85 views
12

由於某種原因,這不起作用AS選擇:MySQL的 - 在WHERE

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

給出了這樣的錯誤:ERROR 1054(42S22):在未知列'VAL 'where子句'

如何我做到了嗎?

+2

如果您發現_ever_你自己不得不處理列的一部分,你的模式是錯誤的。 – paxdiablo

回答

20

首先,您不能在WHERE條款上使用ALIAS。你建議立即進行刪除要使用的列,

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

的原因如下:操作順序是SQL,

  • FROM子句
  • WHERE子句
  • GROUP BY子句
  • HAVING子句
  • SELECT子句
  • ORDER BY claus Ë

ALIAS發生在SELECT條款,是WHERE子句之前到位。

,如果你真的想用別名,在子查詢包裹它,

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沒有定義,它只是它。做一個別名像

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