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

c2e8gylq  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(313)

我在大学做一个项目,当我试图搜索收集一些结果时,我似乎遇到了一些问题。
我试图显示结果,其中给出studentname、modulename和degreeid。当我这样做的时候,它似乎在复制值并返回错误的结果。
例如,欧文·巴恩斯只学习计算机科学,而不是哲学,但它只是简单地返回所有的价值观,而不是它应该返回的特定的3。此外,康纳·伯恩正在学习哲学,但这表明他正在学习包括计算机科学在内的每一个模块。
我希望有人能帮我。我使用了两个表(modulesformdegree&studiesmodules),用于将模块链接到degree(使用2个外键)以及将模块链接到studiesmodules(也使用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
wyyhbhjk

wyyhbhjk1#

很难说清楚,因为您还没有发布所有的表定义,但是您的查询在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

但是,where子句中关于条件的联接表已经相当过时,并使用ansi联接被取代,如下所示:

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

相关问题