1

練習のためにいくつかのデータをクエリしようとしていますが、これらは 3 つのテーブルです。

course    assignment    assignment_submissions
id        id            id
          course        assignment

ご覧のとおり、リレーションシップは非常に基本的なものですが、私は単純な SQL にそれほど慣れていないため、練習しています。

が与えられた場合、それに属するcourse 'id'すべての行を見つけるにはどうすればよいですか?assignment_submission

課題を取得する必要があり、次に課題ごとに提出物を取得します。これが私の試みですが、これは失敗し、予想よりもはるかに大きなデータセットを返します。

SELECT sub.id, sub.grade,
FROM uv_assignment_submissions sub, uv_assignment ass
WHERE ass.course = 1245
4

3 に答える 3

3

あなたの試みの問題は、3 つのテーブルの外積があり、使用される uv_assignment の行のみを制限していることです。したがって、コース 1245 では、そのコースに関係なくても、すべての課題が表示されます。

しかし、あなたは近かった:

SELECT sub.id, sub.grade,
FROM 
    uv_assignment_submissions sub, uv_assignment ass
WHERE 
    sub.assignment = ass.id
    and ass.course = course.id
    and ass.course = 1245
于 2013-05-03T04:00:31.973 に答える
2

これを試して:

SELECT c.ID AS Course
     , a.id AS Assignment
     , `as`.id AS Assignment_sub
  FROM course c
  JOIN assignment a 
       ON c.id = a.course
  JOIN assignment_submissions `as` 
       ON a.id = `as`.assignment
 WHERE c.id = 1

出力:

╔════════╦════════════╦════════════════╗
║ COURSE ║ ASSIGNMENT ║ ASSIGNMENT_SUB ║
╠════════╬════════════╬════════════════╣
║      1 ║          1 ║              1 ║
║      1 ║          1 ║              2 ║
║      1 ║          2 ║              3 ║
╚════════╩════════════╩════════════════╝

このSQLFiddleを参照してください

于 2013-05-03T04:03:56.433 に答える