我有一个名为cursos
的MySQL表中可用的课程列表。
我在一张名为usuarios
的表格中列出了所有学生的名单。
要知道哪个用户注册了哪个课程(这是一个多对多的关系),我有一个cursosUsuarios
表。
我想向用户显示所有可用课程的列表,供他/她选择要注册的新课程。但我不想在该列表中显示用户已注册的课程。
所以,我想到了这一点,例如,显示用户UID 1不在的所有可用课程:
SELECT DISTINCT cursos.cursoID, cursos.nombreCurso
FROM cursos LEFT JOIN cursosUsuarios
ON cursos.cursoID = cursosUsuarios.cursoID
WHERE cursosUsuarios.userID != 1
GROUP BY cursosUsuarios.cursoID
这是预期的结果:
User 1
属于Curso D
(ID.8),因此,列表不应显示Curso D
。
cursos.cursoID ---------- cursos.nombreCurso
5 -------------------------- Curso A
6 -------------------------- Curso B
7 -------------------------- Curso C
但是列表显示了每一门课程(甚至是Curso D
),因为还有其他学生注册了该课程,因此,在表格中,curso D
ID也出现在其他行中,即使用户ID 1不在那里。
这就是我在cursosUsuarios中所得到的:
cursosUsuarios.cursoID ---------- cursosUsuarios.userID
8 ------------------------------------ 1
6 ------------------------------------ 2
7 ------------------------------------ 4
8 ------------------------------------ 3
6 ------------------------------------ 5
5 ------------------------------------ 2
因此,curso D(id.8)除了用户ID 1之外还有其他用户注册,因此,这就是它出现在列表中的原因,因为用户ID为3的行。
我该如何解决?
答案 0 :(得分:0)
我刚刚找到了解决方案,以防万一它可以帮助某人:
我只需要进行子选择查询,其中第二个查询显示注册用户ID为1的所有课程,然后,第一个选择查询包含WHERE子句:
SELECT DISTINCT cursos.cursoID, cursos.nombreCurso
FROM cursos LEFT JOIN cursosUsuarios
ON cursos.cursoID = cursosUsuarios.cursoID
WHERE cursos.cursoID
NOT IN (SELECT cursoID from cursosUsuarios WHERE userID = 1)