[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