1

これまでのところ、これを理解できません。これらのテーブルがあります。

  • 学生- 列: ID、名前
  • スタッド クラス- 列: 学生 ID、クラス ID
  • クラス- 列: id、courses_id
  • コース- 列: ID、名前

std_classテーブルに一致する行がない学生、または特定のコースのクラスに属していない学生 (特定のコースはパラメーターです) を選択する必要があります

例: クラスを持っていない生徒、またはクラスに含まれているが、のクラスではない生徒を選択しますcourse.id = 2

これまでにこれを行いましたが、機能しません。クエリは行を返しません。ちょっとややこしいのはわかっていますが、この場合の JOINS の使い方がわかりません。

SELECT  students.id, students.name 
FROM    students, stud_class, class
WHERE ( NOT (students.id = stud_class.students_id) )
  OR  ( (students.id=stud_class.students.id) AND 
        (stud_class.class_id=class.id) AND 
        ( NOT (class.course_id=2) )
      );
4

1 に答える 1

2

私があなたの質問を正しく解釈している場合、他のクラスがあるかどうかに関係なく、特定のコースのクラスに含まれていないすべての学生を探していることになります。その場合、これは機能しますか?

SELECT id, name FROM students
WHERE id NOT IN (
    SELECT stud_class.students_id FROM stud_class, class
    WHERE stud_class.class_id = class.id
    AND class.courses_id = 2
)

サブクエリはコース2のクラスにいるすべての学生のIDを取得し(例に従って)、メインクエリはそのリストにないすべての学生のIDを取得します。

于 2013-06-13T00:43:43.367 に答える