[SQL ] 不同Table的欄位做Union

作者: UCboy (遊戲boy)   2018-08-09 10:51:21
(針對 SQL 語言的問題,用這個標題。請用 Ctrl+Y 砍掉這行)
資料庫名稱: Oracle PL/SQL 11c
內容/問題描述:
直接上code問比較快 XD
假設T1 T2 T3三個不同課程的表 都含有學生編號 但欄位名稱不同
而StdGroup表內含每個學生的分組 ( StdNo 對應 SGroup )
而現在是想計算每個這三個課程中
每個分組的學生總人數
我的寫法目前如下
WITH TT AS (
SELECT SNO FROM T1
UNION //因為每個學生可能會選複數堂課程所以不用Union All
SELECT SNO FROM T2
UNION
SELECT STDNO FROM T3 //這邊有需要另外加上 AS SNO嗎?
)
SELECT SGroup, COUNT(StdNo)
FROM StdGroup
WHERE StdNo IN (SELECT DISTINCT SNO FROM TT) //避免有取到SNO所以多加了DISTINCT
//如果改成 IN (SELECT * FROM TT) 是一樣的意思嗎?
GROUP BY SGroup
ORDER BY SGroup;
請問一下這樣的寫法是對的嗎?
TT的那個唯一一個欄位 名稱是SNO嗎?
最後的IN-Subquery那邊雖然用*好像比較穩一點
但聽學長說用*的效能比較差一點 要養成習慣(?
只是好奇 兩種寫法應該是一樣的效果對嗎?
作者: moyasi (Simple Life)   2018-08-10 11:22:00
有用到什麼欄位就用什麼 寫*只會害死後面維護的table TT又不只有SNO欄位 當然不一樣

Links booklink

Contact Us: admin [ a t ] ucptt.com