2016-11-20 41 views
-2

我有2張學校報名表(sid,grade,dname,cno,sectno)和 學生(sid,sname,性別,年齡,year,gpa)SQL查詢詢問只有部分學生的ID超過10的學生的ID

我必須寫查詢,詢問只有部分學生的ID超過10名的學生。

爲什麼這個查詢沒有給我正確的結果?

select student.sid 
from student 
where student.sid IN (select student.sid 
         from enroll 
         group by sectno, cno, dname 
         having count (distinct enroll.sid) > 10) 

這個查詢怎麼樣,它是正確的嗎?

select distinct sid 
from enroll e1 
where 10 < (select count (*) 
      from enroll e2 
      where e2.sectno = e1.sectno 
       and e2.cno = e1.cno 
       and e2.dname = e1.dname) 
order by sid 
+0

顯示預期的結果和你現在得到的輸出。查詢似乎幾乎可以。順便說一下,你爲什麼要做自我連接? –

回答

0

嘗試使用類似下面:

select sid 
from enroll e1 
where (select count (sectionId) from enroll e2) > 10 
order by sid ASC 

注:不要在這種情況下使用distinct

+0

這是不正確的,這是給我所有的數據庫中的sid。 – Ahmed

+0

是的,它只會返回超過10個學生的部分。我想,在表格中,所有部分都有10多名學生。檢查桌子。 –

+0

我們有許多部分sid count <10(即入學少於10) – Ahmed

1

有一個子查詢返回少於10名 學生的部分的sectno。做NOT IN結果。

select distinct sid 
from enroll 
where sectno not in (select sectno 
        from enroll 
        group by sectno 
        having count(sid) < 10)