2014-09-25 26 views
0

如果你有下列表格:MYSQL - 找老师1和被给予的课程名称2

course: 
    +---------------+---------------+ 
    |  id  |  Name  | 
    |---------------|---------------| 
    |  1  | Maths  | 
    |  2  | English  |   
    |  3  | Art   |   
    |  4  | Physics  |   
    |  5  | Psychology |   
    +-------------------------------+   

    course_teacher:         
    +----------------------+---------------------+   
    |  course_id  |  teacher_id  | 
    |----------------------|---------------------| 
    |  1    | 1     | 
    |  2    | 1     | 
    |  1    | 2     | 
    |  2    | 2     | 
    |  3    | 2     | 
    +----------------------v---------------------+ 

我怎样才能获得通过教师1和2

给出课程名称列表我的尝试:SELECT DISTINCT( COURSE_ID ) FROM course_teacher WHERE teacher_id IN (1,2);

但是,这种查询过滤所有不过滤的双重结果对教师1和2

+0

基本“加入的cheatsheet”,我不能推荐这还不够:http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ – tedder42 2014-09-25 21:59:05

回答

2
SELECT DISTINCT(name) FROM courses c 
INNER JOIN course_teachers ct ON c.id = ct.course_id 
WHERE ct.teacher_id = 1 OR ct.teacher_id = 2; 

http://sqlfiddle.com/#!2/8f7f9/6/0

如果你想只为教师的课程,那么它的相关性:

SELECT name FROM courses c 
INNER JOIN course_teachers ct ON c.id = ct.course_id 
WHERE ct.teacher_id = 1 OR ct.teacher_id = 2 GROUP BY c.id 
HAVING COUNT(c.id) = 2; 

http://sqlfiddle.com/#!2/8f7f9/7/0

+0

错老师1不给我艺术 – botenvouwer 2014-09-25 22:05:47

+0

更新我的回答 – maszter 2014-09-25 22:10:54

+0

好吧,我已经找到了解决方案,但无论如何你看起来更好。谢谢! – botenvouwer 2014-09-25 22:12:17

0

发现我现在JOIN表:

SELECT vk1.`course_id` 
FROM `course_teacher` vk1, `course_teacher` vk2 
WHERE vk1.`teacher_id` =2 
AND vk2.`teacher_id` =10 
AND vk1.`course_id` = vk2.`course_id` 
GROUP BY vk1.`course_id` 

请注意,我没有包含课程名称!这需要一个额外的JOIN