MYSQL搜索返回错误和重复的值

时间:2018-11-08 14:39:52

标签: mysql

我正在大学里做一个项目,当我尝试搜索以收集一些结果时,似乎遇到了一些问题。

我正在尝试显示给出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

1 个答案:

答案 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