MySQL:排除至少出现一次特定字段值的所有用户
我正在尝试创建一个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
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')
我现实生活中的查询连接了很多表,但我无法很快确定要内部连接哪些表。不过非常感谢你的建议!我以后可能会试试。这太完美了。非常感谢你!