繁体   English   中英

如何为ALL条件编写此SQL查询?

[英]How do i write this SQL query for an ALL condition?

我需要在MySQL中建立一个SQL查询来解决问题,这是分配给课程的一部分。 我已经在这个问题上工作了一段时间了,但是我很难弄清楚如何正确构造此查询。 一般而言,我对SQL语言和数据库不熟悉,因此对这个问题感到困惑。 我已经发布了到目前为止的建议,但是不幸的是我无法获得想要的结果。 如果有人能给我一些指导,以实现这一目标,我将不胜感激。

这是我的表结构:

课程( cid ,fid,房间)

报名( cidsid ,年级)

教职员工( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM