无法查询三个表的结果

时间:2013-05-03 03:51:44

标签: mysql sql

我正在尝试查询一些数据来练习,这些是三个表:

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

3 个答案:

答案 0 :(得分:3)

您需要JOIN所有3个表,courseassignmentassignment_submissions。我使用了JOIN构造,假设您只有在assignmentsassignment_submissions存在某些记录时才需要显示课程详细信息。

您的查询失败的原因是,它当前获取Cartesian中所有记录的2 tables产品,您需要一个条件来指定哪些行对当前{{1}有效通过指定assignment条件

这样的事情应该有效

JOIN

有关SQL联接的更多信息:http://dev.mysql.com/doc/refman/5.0/en/join.html

答案 1 :(得分: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

答案 2 :(得分: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 ║
╚════════╩════════════╩════════════════╝

See this SQLFiddle