簡體   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