2009-12-16 139 views
0

假設我們有兩個實體:教師和學生。SQL問題,挑戰

每位老師有多個學生。

現在我想:

查詢最多5名教師,併爲每一位教師,不超過他的學生10。

到目前爲止,這可以很容易地通過做:

select *, 
(
select GROUP_CONCAT('<sid>',students.name,'</sid>') from students on 
teachers.id=students.teacher limit 10 
) as students 
from teachers limit 5 

但是,這並不是故事的全部呢。

如果教師的人已超過10名學生,應該返回true爲老師,否則false

如何做到這一點的SQL?

+0

請準確。產生的關係應具有什麼樣的標題? – 2009-12-16 04:48:55

+1

這是什麼數據庫? – 2009-12-16 04:49:27

+0

僞代碼就足夠了。 – user198729 2009-12-16 04:50:01

回答

0

僞SQL:結果每一行對應一個10名學生的每個5名教師的

select t.teacher_id, s.student_id, 
    case when t2.count > 10 then 'true' else 'false' end 
from 
    (select top 5 * 
    from teachers 
    order by teacher_id) t 
join 
    (select top 10 * 
    from students s1 join teachers t1 on s1.teacher_id = t1.teacher_id 
    order by student_id) s 
on t.teacher_id = s.teacher_id 
join 
    (select teacher_id, count(*) as count 
    from teachers t join students s on t.teacher_id = s.teacher_id 
    group by teacher_id) t2 
on t2.teacher_id = t.teacher_id 
+0

我不認爲第二個子查詢是正確的(在再次看這個之後)。它只會返回10名學生,而不是每位教師10名學生。 – ecounysis 2009-12-16 05:20:13

+0

您只會下注10名學生,而不是每位教師10名學生 – 2009-12-16 05:50:32

0

使用子查詢選擇的每一位老師。

+0

對不起,我遺漏了最重要的東西,看我的更新。 – user198729 2009-12-16 04:55:57