作者UCboy (游戏boy)
看板Database
标题[SQL ] 不同Table的栏位做Union
时间Thu Aug 9 10:51:21 2018
(针对
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://webptt.com/cn.aspx?n=bbs/Database/M.1533783083.A.26A.html
※ 编辑: UCboy (210.71.217.243), 08/09/2018 11:02:27
1F:推 moyasi: 有用到什麽栏位就用什麽 写*只会害死後面维护的 08/10 11:22
2F:→ moyasi: table TT又不只有SNO栏位 当然不一样 08/10 11:23
TT table 不就只有一个SNO栏位吗?
还有甚麽吗?
我直接去做Table中的SELECT-UNION
最终结果的栏位显示SNO是没错
所以我猜Oracle应该是
会以UNION的第一个Table之栏位名称为该栏位的名称
以上有错误麻烦改正 感谢各位~
※ 编辑: UCboy (210.71.217.243), 08/10/2018 14:59:21