[英]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.