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

返回错误和重复值的MYSQL搜索,mysql,Mysql,我在大学里做一个项目,当我试图搜索并收集一些结果时,我似乎遇到了一些问题 我试图显示给出StudentName、ModuleName和DegreeID的结果。当我这样做时,它似乎在复制值并返回错误的结果 例如,欧文·巴恩斯只是学习计算机科学,而不是哲学,但它只是返回所有的值,而不是它应该返回的指定值。此外,康纳·伯恩正在学习哲学,但这表明他正在学习包括计算机科学在内的每个模块 我希望有人能帮我。我使用了两个表(ModulesFormDegree和StudiesModules),它们用于将模块链接

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

我试图显示给出StudentName、ModuleName和DegreeID的结果。当我这样做时,它似乎在复制值并返回错误的结果

例如,欧文·巴恩斯只是学习计算机科学,而不是哲学,但它只是返回所有的值,而不是它应该返回的指定值。此外,康纳·伯恩正在学习哲学,但这表明他正在学习包括计算机科学在内的每个模块

我希望有人能帮我。我使用了两个表(ModulesFormDegree和StudiesModules),它们用于将模块链接到学位(使用2个外键)和学生与模块(也使用2个外键)

我在下面附上了我的问题,如果需要更多的数据,请让我知道

查询:

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

很难说清楚,因为您尚未发布所有的表定义,但您的查询在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
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
但是,WHERE子句中条件上的联接表相当陈旧,并使用ANSI联接取代,如下所示:

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

您编写的查询是什么?请编辑您的问题并添加您的查询。抱歉,它似乎复制了我的图像。我现在将进行编辑以显示。您是否可以将查询添加为文本而不是图像?我怀疑您的问题可以通过使用ANSI join SYNTASHI@philcode101解决,请将您的查询添加为文本而不是图像,以便于其他人帮助您。您好,正如您所写,我的查询中有where子句!值得注意的是,在我的项目中,由于某种原因,我只能使用where查询。我添加了最后一个条件。你上面的查询有三个条件,我的有四个哦,我明白了!很抱歉我的困惑,我对sql非常陌生(你可能知道!)我会在回家后重新尝试这个查询,并让你知道结果!