MySQL:排除至少出现一次特定字段值的所有用户

MySQL:排除至少出现一次特定字段值的所有用户,mysql,Mysql,我正在尝试创建一个MySQL报告,其中只包含学生用户,而不是其他课程的教师。有时,用户可以是一门课程的学生,也可以是另一门课程的教师。我想从我的报告中完全排除该用户 User Table userid username 1 Bob 2 John 3 Sally 4 Suzy Courses Table courseid coursename 100 Geometry 101 Lite

我正在尝试创建一个MySQL报告,其中只包含学生用户,而不是其他课程的教师。有时,用户可以是一门课程的学生,也可以是另一门课程的教师。我想从我的报告中完全排除该用户

User Table
userid   username
  1        Bob
  2        John
  3        Sally
  4        Suzy



Courses Table
courseid   coursename
  100      Geometry
  101      Literature
  102      Spanish

Enrollments Table
userid   courseid   role
   1        100     student
   1        101     teacher
   2        100     student
   2        102     student
   3        101     student
   3        102     student
   4        100     student
   4        102     teacher
所需的输出将是:

username    coursename     role
  John        Geometry     student
  John        Spanish      student
  Sally       Literature   student
  Sally       Spanish      student
鲍勃和苏西不会被包括在内,因为他们至少在一门课程中有教师角色

SELECT u.username, c.coursename, e.role
FROM enrollments e
JOIN users u ON user.userid = e.userid
JOIN courses c ON c.courseid = e.courseid
WHERE e.role = 'student'
…不够具体,因为这将包括Bob和Suzy的学生注册

我想我应该以某种方式使用subjoin,但这是我迄今为止写过的任何疑问。谢谢你的帮助

试试这个:

    select u.username,c.coursename,e.role
    from User as u
    inner join Enrollments as e
    on u.userid=e.userid
    inner join Courses as c
    on c.courseid=e.courseid
    -- where `condition`
使用
内部联接
代替常规的
联接

试试

SELECT u.username, c.coursename, e.role
FROM enrollments e
JOIN users u ON user.userid = e.userid
JOIN courses c ON c.courseid = e.courseid
WHERE u.userid NOT IN (SELECT DISTINCT userid FROM enrollments WHERE role = 'teacher')

我现实生活中的查询连接了很多表,但我无法很快确定要内部连接哪些表。不过非常感谢你的建议!我以后可能会试试。这太完美了。非常感谢你!