Sql語句中用別名作判斷條件
當我們使用某個表示式作為輸出的一列時,我們無法再Where條件中直接使用該列作判斷條件.
例如下面的SQL語句:
select id, (c1 + c2) as s from t1 where s > 100
SQL Server 報錯: "列名 s 無效"
當然,寫成
select id, (c1 + c2) as s from t1 where (c1 + c2) > 100
就沒問題了.
可是當表示式複雜時就很繁瑣了.
有沒有可以在Where中使用這樣的列名的辦法?
或者有什麼其他辦法可以解決這類問題呢?
解決方法:
SQL code複製程式碼
select t2.* from (select id, (c1 + c2) as c from t1) t2 where c > 100 --或者 select t2.* from (select id, c = c1+c2 from t1) t2 where c > 100
由於在Where語句不能直接使用列別名,因此我們需要將Sql語句給包裝一下
在ORACLE中,在WHERE子句中引用列別名會出錯,這是為什麼呢?
因為:SELECT 語句的執行順序
1. from語句
2. where語句(結合條件)
3. start with語句
4. connect by語句
5. where語句
6. group by語句
7. having語句
8. model語句
9. select語句
10. union、minus、intersect等集合演算演算
11. order by語句
總結:Sql語句中不能直接用別名作為where條件判斷
原文:https://www.cnblogs.com/dwfbenben/archive/2013/09/07/3307941.html