【发布时间】:2017-02-05 08:36:11
【问题描述】:
这是我有一个表“教师”的情况,其列是 (tid, tname) 我有一个表'学生',其列是(sid,sname)。假设他们有 m:n 关系,我还有一个表 t_s (tid,sid),其中 tid 和 sid 分别引用教师的 tid 和学生的 sid。 现在我想找到:教师姓名(及其tid)和每个教师下的学生人数。[不使用联接或笛卡尔积]
以下查询返回带有 tid 的计数:
SELECT t.tid, count(*) as numberofstudents
FROM t_s t
GROUPBY by t.tid;
如何将 tname 与相应的 tid 匹配,尝试使用 union:
SELECT t.tid, count(*) as numberofstudents
FROM t_s t
GROUP BY t.tid
UNION
SELECT t1.tid,t1.tname
FROM teachers t1
WHERE t1.tid in (SELECT t2.tid
FROM t_s t2 )
发现它不起作用,因为列类型不同。
有没有办法实现它? 谢谢!
【问题讨论】:
-
为什么没有连接?
-
避免 JOIN 有点反常。
-
纯粹是展示性的吗?您想要教师姓名的标题行,然后是他们下方的人数(而不是旁边)?
-
@MatthewCawley,感谢您的回复。没有加入,因为这是一种作业,查询输出必须类似于:(tid,tname,numberofstudents),