2013-02-24 40 views
1

我有一张表,我在这里列出参加课程的用户。在这张桌子下面,我想要一个<select>字段,以及不参加这个班级的用户列表。如何选择id不等于一组答案

查询,列出用户出席类:

SELECT * FROM User 
left join UserCourse on User.id = UserCourse.fkStudentId 
where UserCourse.fkCourseId = 1 and u.fkRoleId = 3; 

这里是我的代码,在那里我尝试列出的“例外”:

SELECT * FROM User where id != 
(SELECT id FROM User 
left join UserCourse on User.id = UserCourse.fkStudentId 
where UserCourse.fkCourseId = 1 and u.fkRoleId = 3); 

的问题是,有几个匹配第二个查询的行,这是不允许的。 你有什么建议如何列出不参加的学生?

+1

你想:'不in' – 2013-02-24 20:37:36

+0

为什么要用'左join'?是否有用户标识存在于课程表中但不在用户表中的情况?此外,你可以使用'AND fkStudentID = NULL'让学生不参加。 – shahkalpesh 2013-02-24 20:38:44

+0

[multiple search condition sql]可能的重复(http://stackoverflow.com/questions/10341394/multiple-search-condition-sql) – gdoron 2013-02-24 20:39:06

回答

5

更换!=NOT IN

SELECT * FROM User where id NOT IN 
(SELECT id FROM User 
left join UserCourse on User.id = UserCourse.fkStudentId 
where UserCourse.fkCourseId = 1 and u.fkRoleId = 3); 
+0

就像一个魅力!谢谢! :) – Kriszta 2013-02-24 20:41:26