[英]How do i write this SQL query for an ALL condition?
我需要在MySQL中建立一个SQL查询来解决问题,这是分配给课程的一部分。 我已经在这个问题上工作了一段时间了,但是我很难弄清楚如何正确构造此查询。 一般而言,我对SQL语言和数据库不熟悉,因此对这个问题感到困惑。 我已经发布了到目前为止的建议,但是不幸的是我无法获得想要的结果。 如果有人能给我一些指导,以实现这一目标,我将不胜感激。
这是我的表结构:
课程( cid ,fid,房间)
报名( cid , sid ,年级)
教职员工( fid ,fname,dept,rank)
学生( sid ,sname,专业,学分)
这是我需要构建的查询:
显示已教授所有计算机科学专业的所有学院的学院编号和学院名称(major ='CSC')。
到目前为止,这是我尝试过的方法:
select f.fid, f.fname
from faculty f
join course c
on f.fid = c.fid
join enroll e
on c.cid = e.cid
join student s
on e.sid = s.sid
where s.sid = ALL
(select sid
from student
where major = 'CSC');
select f.fid, f.fname
from faculty f
join course c
on f.fid = c.fid
join enroll e
on c.cid = e.cid
join student s
on e.sid = s.sid
group by f.fid, s.sid
having s.sid = ALL
(select sid
from student
where major = 'CSC'));
我一直很难理解的逻辑障碍是如何确保教师正在教授当前的CSC专业的所有课程。 您可以看到我试图添加一些逻辑来检查返回的每条记录,但是恐怕我可能会误解语法。 这些查询将运行,但它们返回空集。 谢谢您的帮助。
您所做的看起来不错。 我认为您可能只是想而已。 从逻辑上讲,这应该为您提供所需的信息:
Select f.fid, f.fname
from faculty f
join course c on c.fid = f.fid
join enroll e on e.cid = c.cid
join student s on s.sid = e.sid
Where major = 'CSC'
group by f.fid, f.fname
试试看
select f.fid, f.fname
from faculty f
join course c
on f.fid = c.fid
join enroll e
on c.cid = e.cid
join student s
on e.sid = s.sid
where s.sid IN (select sid from student where major = 'CSC');
我同意这个问题可能是不清楚的,他们可能只是教给任何 CSC主要全体教职工之后。 但是,以防万一您仍然需要教授所有 CSC专业的所有教职员工,那么应该可以这样做:
以下查询告诉我们教师和CSC专业对:
select f.fid, s.sid
from faculty f
inner join course c
on f.fid = c.fid
inner join enroll e
on e.cid = c.cid
inner join student s
on e.sid = s.sid
where s.major = 'CSC'
group by f.fid, s.sid
因此,如果我们知道计算机科学专业的学生人数:
select count(1)
from student s
where s.major = 'CSC'
然后,我们可以将每个教员教授的CSC专业的总数相加,并确定它等于CSC专业的总数:
select b.fid, b.fname
from (
select a.fid, a.fname, count(1) as taught_count
from (
select f.fid, f.fname, s.sid
from faculty f
inner join course c
on f.fid = c.fid
inner join enroll e
on e.cid = c.cid
inner join student s
on e.sid = s.sid
where s.major = 'CSC'
group by f.fid, s.sid
) a
group by a.fid, a.fname
) b
where b.taught_count = (
select count(1)
from student s
where s.major = 'CSC'
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.