表连接连接条件不当导致查询结果变多

联表的时候需要注意联表的连接条件,因为一般连接其他表只是为了获取其他表的一部分数据,所以主表的一条记录按照连接条件一般情况下只会对应连接表的一条记录。否则可能导致数据比预期要多。(比如查学员的作业,会用作业表作主表)
为什么一般表数据关联都是用主键,主要原因是因为主键索引,还有一个原因是唯一性。
例子:
需求:需要查询学员的课表,同时需要知道课表的课节是否布置作业以及学员是否完成作业。
学员课表:里面本质上就是一个个课节,课节内还存有学员id,代表是谁的课表课节
布置作业:老师可以针对课节布置作业
学员作业:学员针对老师布置的作业去上传自己的作业
一开始我的设计是课表作为主表,通过课节id和布置作业关联,再接着用课表里面的课节id和学员作业表的课节id关联进行查询。但实际数据比预期要多,因为一个课节会有多个人交作业,但我只关联了课节,这样不同人的作业都会被查出来。和需求效果不一致。

分析:
首先,课表连接布置作业表,因为课表里面的课节和老师布置作业是一一对应的。所以直接用课节id去连接就可以了。接着再连接学员作业的时候就需要注意了。因为一个课节,大概率有很多学员会参加,也就意味着会有多个作业。所以不能单纯用课节id去关联;不过也不能单纯用学员id去关联,因为一个学员会交不同课节的作业。综上,需要用课节id和学员id一起作为连接条件去关联表才行,这样才能定位到哪节课哪个人交的作业。

你可能感兴趣的:(基础,数据库,sql,mysql,数据库)