我正试图在数据库中为每个学生获取信息。我知道只有4名学生,所有学生之间有6名入学(即。有些学生报读多门课程)。因此,适当的输出将有6行,都包含必要的学生信息。返回的查询中会有重复的学生。我能够很好地加入学生和入学人数,最终达到了6名学生的总数。但是,一旦我加入到其他表中,以获取有关学生注册的课程的数据,我最终会得到越来越多的行。根据我设置查询格式的方式,我得到7-11行。我只想要对应于注册的6行,仅此而已。为什么会发生这样的事,我该怎么解决呢?
我尝试过不同类型的连接,工会,交叉点,并且已经在这个问题上工作了一个多小时。这就是我目前的情况:
Select s.sid, e.term, c.cno, e.secno, ca.ctitle
from Students as s
join Enrolls as e
on s.sid = e.sid
join Courses as c
on e.secno = c.secno
join Catalogue as ca
on ca.cno = c.cno发布于 2022-06-12 01:30:50
看起来,Courses和Enrollment表具有我们所称的“复合键”。我敢打赌,您必须加入c和e表,同时使用term和secno列。
您的查询应该如下所示:
SELECT s.sid, e.term, c.cno, e.secno, ca.ctitle
FROM Students AS s
JOIN Enrolls AS e ON s.sid = e.sid
JOIN Courses AS c ON e.secno = c.secno AND e.term = c.term
JOIN Catalogue AS ca ON ca.cno = c.cno当您有一个复合键并且只使用其中一个列来连接时,您将从外部表中得到不想要的行,从而生成笛卡尔产品结果。
https://stackoverflow.com/questions/72588872
复制相似问题