我正在大学里做一个项目,当我尝试搜索以收集一些结果时,似乎遇到了一些问题。
我正在尝试显示给出StudentName,ModuleName和DegreeID的结果。当我这样做时,它似乎正在复制值并返回错误的结果。
例如-Owen Barnes仅研究计算机科学,而不是哲学,但它只是返回所有值,而不是返回应指定的3个值。此外,Connor Borne正在研究哲学,但暗示他正在研究包括计算机科学在内的每个模块。
我希望有人能帮助我。我正在使用2个表(ModulesFormDegree和StudiesModules),这些表用于将模块链接到学位(使用2个外键)和使用模块的Student(还使用2个外键)。
我在下面附加了我的问题,如果需要更多数据,请告诉我。
Inquiry & Results Description of Tables
查询:
select StudentName, ModuleName, DegreeID
from Student, Modules, Degree, StudiesModules, ModulesFormDegree
where Student.StudentID=StudiesModules.StudentID and
Modules.ModuleID=ModulesFormDegree.ModID and
Degree.DegreeID=ModulesFormDegree.DegID
答案 0 :(得分:1)
很难肯定地说一句,因为您尚未发布所有表定义,但是查询缺少where子句中导致笛卡尔乘积的条件,可以按如下所示进行修复:
select StudentName,
ModuleName,
DegreeID
from Student,
Modules,
Degree,
StudiesModules,
ModulesFormDegree
where Student.StudentID=StudiesModules.StudentID and
Modules.ModuleID=ModulesFormDegree.ModID and
Degree.DegreeID=ModulesFormDegree.DegID and
StudiesModules.ModuleID = ModulesFormDegree.ModID
但是,使用ANSI联接对WHERE子句中条件表的联接表相当过时并被取代,如下所示:
SELECT StudentName,
ModuleName,
DegreeID
FROM StudiesModules sm
JOIN ModulesFormDegree md
ON sm.ModuleID = md.ModID
JOIN Degree d
On d.DegreeID = md.DegID
JOIN Modules m
ON m.ModuleID = md.ModID
JOIN Student s
ON s.StudentID = sm.StudentID