我有一个课程列表(可以打开或关闭)和一个用户列表(可以注册一个或多个课程)。

我有三个表:usuarios(用于用户),cursos(用于课程)和cursosUsuarios(将两者链接起来以知道谁在哪里注册)。

我想显示未注册特定用户(即UID 18)的可用课程列表。

我正在尝试此查询,但无法正常工作:

SELECT cursos.cursoID, cursos.nombreCurso, cursos.cursoFechaInicio,
       cursos.modalidadCurso, cursos.estadoCurso,
       cursosUsuarios.userID, cursosUsuarios.cursoID
FROM cursos
    LEFT JOIN cursosUsuarios ON cursos.cursoID = cursosUsuarios.cursoID
WHERE cursosUsuarios.userID NOT IN (
                                    SELECT cursosUsuarios.userID
                                    FROM cursosUsuarios
                                   )
AND estadoCurso='abierto'
AND cursosUsuarios.userID = 18


这些是我的表:

CREATE TABLE cursos (
    cursoID int unsigned not null auto_increment primary key,
    nombreCurso char(100) not null,
    cursoFechaInicio char(10) null,
    modalidadCurso char(50) not null,
    estadoCurso char(50) not null,
)

CREATE TABLE usuarios(
    userID int unsigned not null auto_increment primary key,
)

CREATE TABLE cursosUsuarios (
    cursosUsuariosID int unsigned not null auto_increment primary key,
    userID int not null,
    cursoID int not null
)

最佳答案

将该条件从WHERE移到JOIN ON子句,例如

FROM cursos LEFT JOIN cursosUsuarios
ON cursos.cursoID = cursosUsuarios.cursoID
AND cursosUsuarios.userID <> 18
WHERE estadoCurso='abierto'

关于mysql - 如何显示不在特定MySQL表中的项目列表?此查询无效,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38707268/

10-11 20:34
查看更多