私は、cursos
というMySQLテーブルで利用可能なコースのリストを持っています。 そして、私はusuarios
というテーブルに全学生のリストを持っています。 そしてどのユーザーがどのコースに登録されているかを知るには(それは多対多関係です)、私はcursosUsuarios
テーブルを持っています。多対多リレーションシップテーブル内の特定のアイテムIDを除外するMySQLでリストを選択する方法は?
登録する新しいコースを選択するために利用可能なすべてのコースのリストをユーザーに表示します。しかし、私はそのリストにユーザーがすでに登録されているコースを表示したくありません。
これは、たとえば、ユーザー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
(番号8)に属しているので、リストは、Curso D
を示すべきではありません。
cursos.cursoID ---------- cursos.nombreCurso
5 -------------------------- Curso A
6 -------------------------- Curso B
7 -------------------------- Curso C
しかし、そのコースに在籍する他の学生があるので、リストには、すべての単一のコース、(でもCurso D
)を示し、そう、テーブルに、curso D
IDでもユーザーがいる場合、同様に他の行に表示されませんID 1は存在しません。
これは私がcursosUsuariosに持っているものです:cursoのD(ID 8)、
のでcursosUsuarios.cursoID ---------- cursosUsuarios.userID
8 ------------------------------------ 1
6 ------------------------------------ 2
7 ------------------------------------ 4
8 ------------------------------------ 3
6 ------------------------------------ 5
5 ------------------------------------ 2
、他のユーザーは、ユーザーID 1以外にも在籍し、そう、それがリストに表示されない理由ですしていますユーザーIDが3の行のためです。
どうすれば解決できますか?私はちょうど2番目のクエリが登録中のユーザーID 1のすべてのコースを示し副選択クエリを、実行する必要があり
し、その後、第1の選択: