[SQL ] 不同Table的欄位做Union

看板Database作者 (遊戲boy)時間5年前 (2018/08/09 10:51), 5年前編輯推噓1(101)
留言2則, 1人參與, 5年前最新討論串1/1
(針對 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, 5年前 , 1F
有用到什麼欄位就用什麼 寫*只會害死後面維護的
08/10 11:22, 1F

08/10 11:23, 5年前 , 2F
table TT又不只有SNO欄位 當然不一樣
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
文章代碼(AID): #1RQwmh9g (Database)