2013-05-10 116 views
-2

我想根據第二張表上每個班上註冊的學生人數來顯示數據。 例如:SQL註冊上限

表1:

ClassID: SLN: Capacity: 
1   ABCD  4 
2   EFGH  20 
3   IJKL  25 
4   MNOP  20 
5   QRST  25 
6   UVWX  25 

表2:

StudentID: Class:  
1    ABCD 
3    DCAB 
2    ABCD 
4    ABCD 
5    ABCD 
6    EFGH 

所以我想輸出是:

ClassID: SLN: Capacity: 
2   EFGH  20 
3   IJKL  25 
4   MNOP  20 
5   QRST  25 
6   UVWX  25 

因此類可以出現在一個表中,但不另一個。我不想要表2中不在表1中的類,但我確實需要表1中的類而不是表2中的類。我也不希望顯示滿的類。 感謝

+0

沒有足夠的信息來解決問題。我們不知道在這種情況下什麼是完整的意思,你對你想要什麼的解釋還不是很清楚。你需要爲我們提供一個SQL小提琴,更重要的是,這看起來像作業。給我們你已經嘗試過的東西,並提供你需要幫助的明確問題。 – Woot4Moo 2013-05-10 17:33:52

+0

我已經試過:使用復原 選擇不同的類別* FROM 類INNER JOIN (SELECT SCClass,計數(SClassID)AS就讀 FROM StudentClass GROUP BY SCClass)子查詢 ON(SubQuery.enrolled <4) (我在這裏使用4代替容量,因爲每個班級沒有足夠的人員來測試20或25的實際容量) – Austin 2013-05-10 17:34:15

+0

完全意味着每個班級註冊的學生人數與容量相同。我無法弄清楚如何只顯示錶1中沒有填充的類,而不是顯示錶1中的所有類。 – Austin 2013-05-10 17:36:25

回答

1

如果我理解你的要求是正確的,我想你可以使用以下命令:

select t1.classid, t1.sln, t1.capacity 
from table1 t1 
where not exists (select 1 -- classes not in table2 
        from table2 t2 
        where t1.sln = t2.class) 
    or t1.capacity > (select count(*) -- classes where capacity not met 
        from table2 t2 
        where t1.sln = t2.class 
        group by class); 

SQL Fiddle with Demo

+0

這很好,謝謝 – Austin 2013-05-10 17:52:50