我正在尝试查询一些数据来练习,这些是三个表:
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
答案 0 :(得分:3)
您需要JOIN
所有3个表,course
,assignment
和assignment_submissions
。我使用了JOIN
构造,假设您只有在assignments
和assignment_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 ║
╚════════╩════════════╩════════════════╝