2016-10-25 6 views
0

私は、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 1Curso 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の選択:

答えて

0

私はちょうどそれが誰かを助け念のために、解決策を見つけましたクエリに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) 
関連する問題