情境
執行T-SQL:SELECT id, (price * 0.79) AS SpecialPrice FROM Books WHERE SpecialPrice > 300
會得到這樣的的錯誤訊息:無效的資料行名稱 'SpecialPrice'。
WHY
以下是MSDN上的解釋:SELECT 陳述式的邏輯處理順序
下列步驟顯示 SELECT 陳述式的邏輯處理順序或繫結順序。這個順序決定何時將某一個步驟中定義的物件提供給後續步驟的子句使用。例如,如果查詢處理器可以繫結至 (存取) FROM 子句中定義的資料表或檢視表,則這些物件及其資料行就可供所有後續步驟使用。 反之,由於 SELECT 子句是步驟 8,因此之前的子句無法參考該子句中定義的任何資料行別名或衍生資料行。不過,後續子句 (例如 ORDER BY 子句) 可以參考這些資料行別名或衍生資料行。請注意,實際執行的陳述式是由查詢處理序所決定,因此順序可能與此清單有所不同。
- FROM
- ON
- JOIN
- WHERE
- GROUP BY
- WITH CUBE 或 WITH ROLLUP
- HAVING
- SELECT
- DISTINCT
- ORDER BY
- TOP
簡單一句話
WHERE的執行順序比SELECT優先,自然也就不認得SELECT裡的Alias了。參考資料:
[MSDN Forum]Order of Execution 可以參考回答提供的連結
至於MySQL可以參考:Can you use an alias in the WHERE clause in mysql?
回目錄
回首頁
沒有留言 :
張貼留言