在這裡,我想談的是接在From之後的子查詢
有點像是臨時表的運用
table name: test
---------------------------
| key | value |
| a | 1 |
| b | 2 |
| c | 3 |
table name: test2
---------------------------
| key | value |
| a | 3 |
| b | 4 |
| c | 5 |
| d | 6 |
| e | 7 |
一般來說,正常的查詢,是
select * from test
這時後可以做一個修改,可以得到相同的結果
select key,value from(
select key,value from test
) as testtable
基本上,結果是一樣的,還有一個重點是後面的 「as testtable」設定別名是必要的,否則會出現錯誤。
假設,想要從test和test2同時取出資料又想要針點相同的key做group算總合時,一般使用union將兩個表做連結是做不到的,會分成兩筆資料,這個時後,就可以用剛剛的做法。
select k,sum(v) from(
select key as k,value as v from test
union all
select key as k,value as v from test2
) group by k
這裡特別使用別名方式來說明
最外層的select欄位名,需要和子查詢的相同,而union本身,兩組甚至三組以上的select,欄位名與位置也必需相同。
而這種方式,可以對多組union去做order排序,只要在最外層做排序即可。
select k,v from(而最外層的select欄位,並不一定要完全跟子查詢的欄位數完全相同,也可以只查某個欄位。只要外層的
select key as k,value as v from test
union all
select key as k,value as v from test2
) order by k
select v from(
select key as k,value as v from test
union all
select key as k,value as v from test2
) order by k