使用连接从多个表中获取数据

时间:2012-10-29 19:21:12

标签: mysql sql select

我有各种各样的表格,如

Student
primary id , students name, course

Papers
paper id, papername, course, semester, type

StudentOptions
primary id, studentid (foreign key - reference student id) and paperid (foreign key - references paper id)

StudentsTerm
studentid (foreign key- references student id) and student semester

现在我想要的结果是,

我想选择一门课程然后这个学期,它会给我一些论文/科目的数量与其类型(强制性/可选)以及我想要的学生数量所有这些表格。

我不想创建任何视图或东西,只需一个普通的选择查询即可。

我正在运行的查询是:

SELECT p_name,
       p_id,
       type,
       Count(sps.studentid) AS counts
FROM   students,
       str,
       papers
       LEFT JOIN sps
              ON sps.paperid = papers.p_id
WHERE  sps.studentid = students.studentid
       AND students.studentid = str.studentid
       AND sps.studentid = str.studentid
       AND str.semesterid = p_semid
       AND str.sessionid = 12
       AND students.course = c_id
       AND c_id = 6
       AND p_semid = 1
GROUP  BY p_id 

1 个答案:

答案 0 :(得分:2)

作为更好的实践,如果您要使用显式JOIN语法,则不要使用隐式语法。在您上面发布的查询中,您从papers中选择,但不在任何地方使用它。此外,您的列名略有不明确之处。如果更容易,请使用单个字母对每个表进行别名,或者明确地为列名添加前缀。如果您使用GROUP BY的聚合,则无法选择不在该组中的列。

我们假设这是你的ER图:

让我们先加入所有表格:

SELECT a.id, a.name
FROM student a
JOIN str b ON b.student_id = a.id
JOIN sps c ON c.student_id = a.id
JOIN papers d ON d.id = c.paper_id

现在,您希望找到从特定课程学习论文的学生数量并输入:

SELECT a.id, a.name
FROM student a
JOIN str b ON b.student_id = a.id
JOIN sps c ON c.student_id = a.id
JOIN papers d ON d.id = c.paper_id
WHERE b.semester = 12
    AND d.course = 6

因为你的属性很暧昧,所以很难说出它们来自哪些表。如果您可以在SQL Fiddle上设置结构和示例数据,我们可以为您提供更好的帮助。

相关问题