我有各种各样的表格,如
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
答案 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上设置结构和示例数据,我们可以为您提供更好的帮助。