mysql select 字段別名是否可以用在 select中或者where中


select column1+10 as c1,c1+10 as c2 from table1;
想實現上面的效果,結果在mysql里面報錯了,提示找不到c1這個列;

 

-- 不同的 數據庫不一樣

一般不支持在select中繼續使用別名 或者where語句中使用

如果是在要用 可以嘗試是否支持:

select column1+10 as c1,(select c1)+10 as c2 from table1;

但是在orderby groupby 可以使用

 

---一些解釋參考

 

https://stackoverflow.com/questions/16715504/mysql-define-a-variable-within-select-and-use-it-within-the-same-select/16715618#16715618

https://stackoverflow.com/questions/6081436/how-to-use-alias-as-field-in-mysql

mysql中的SQL語句執行是有一定順序的,如下:
1. from
2. on
3. join
4. where
5. group by
6. with
7. having
8. select
9. distinct
10. order by
11. limit
一條SQL會經過這11步的,中間的每一步都會生成一張虛擬表,后面的步驟都是在上一張虛擬表中進行篩選與查詢的,下面假設,經過了7步也就是經過了having這一步,生成的虛擬表假設為:

id  column1 column2 alias(having后的別名)
1 10 10 aaa 2 20 20 bbb 

現在到了SELECT這一步的時候,你的查詢字段為 column1+10 as c1, 那么sql解析器在這個虛擬表中可以找到column1這個字段,那么計算和設置別名成功, 現在你要c1+10,它發現這個虛擬表中不存在這個字段,那么就會報錯,如果你想這樣做:alias as xxx, 那么也不會報錯,因為having篩選過后,這個別名字段已經在虛擬表中了,所以其實道理很簡單,select的執行順序是排在第8步的,而select是針對以上幾步生成的虛擬表進行操作的,所以你所要使用的字段,如果虛擬表中不存在,那么則會報錯,如果樓主的那句SQL硬要執行的話,也只能改成select column1+10 as c1,column1+10+10 as c2 from table1;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM