2016-11-06 52 views
3

我有一個表pupil_teachers像這樣符合幾個條件中選擇行

+------+----------+------------+ 
| id | pupil_id | teacher_id | 
+------+----------+------------+ 
| 1 | 100  | 200  | 
| 2 | 101  | 200  | 
| 3 | 102  | 200  | 
| 4 | 102  | 201  | 
| 5 | 101  | 201  | 
| 6 | 101  | 202  | 
| 7 | 103  | 200  | 
+------+----------+------------+ 

查詢將檢索小學生100,101和102有共同的所有教師。所以在這種情況下,它只會是老師ID 200

瞳孔103也有老師ID 200,而不是查詢的一部分,我只是想查詢學生100,101和102

所以它將開始於:

SELECT teacher_id 
FROM pupil_teachers 
WHERE 

我真的不知道下一步該去哪裏。顯然,以下說法不正確

SELECT teacher_id 
FROM pupil_teachers 
WHERE pupil_id IN (100, 101, 102) 

回答

4

這裏使用Group ByHaving條款

SELECT teacher_id 
FROM pupil_teachers 
WHERE pupil_id IN (100, 101, 102) 
Group by teacher_id 
Having Count(Distinct pupil_id) = 3 

另一種方式

SELECT teacher_id 
FROM pupil_teachers 
Group by teacher_id 
Having Count(Case when pupil_id = 100 then 1 end) > 0 
    AND Count(Case when pupil_id = 101 then 1 end) > 0 
    AND Count(Case when pupil_id = 102 then 1 end) > 0 
+0

感謝一幫一分的方式!像魅力一樣工作。我確實找到了類似你的第一個類似的解決方案,嘗試了它,但我必須有某種錯誤,因爲它不起作用,哈哈。謝謝!我會盡快接受! – Alex