[SQL ] 不同Table的欄位做Union
(針對 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那邊雖然用*好像比較穩一點
但聽學長說用*的效能比較差一點 要養成習慣(?
只是好奇 兩種寫法應該是一樣的效果對嗎?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.71.217.243
※ 文章網址: https://www.ptt.cc/bbs/Database/M.1533783083.A.26A.html
※ 編輯: UCboy (210.71.217.243), 08/09/2018 11:02:27
推
08/10 11:22,
6年前
, 1F
08/10 11:22, 1F
→
08/10 11:23,
6年前
, 2F
08/10 11:23, 2F
TT table 不就只有一個SNO欄位嗎?
還有甚麼嗎?
我直接去做Table中的SELECT-UNION
最終結果的欄位顯示SNO是沒錯
所以我猜Oracle應該是
會以UNION的第一個Table之欄位名稱為該欄位的名稱
以上有錯誤麻煩改正 感謝各位~
※ 編輯: UCboy (210.71.217.243), 08/10/2018 14:59:21
Database 近期熱門文章
PTT數位生活區 即時熱門文章